■ マイクロチップ デモソフト”Primitive” at PIC32MZ + S1D13517ボード + WQVGA
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048ECH144
A グラフィック制御ボード(グラフィックコントローラS1D13517): マイクロチップ Graphics PICtail Plus
Epson S1D13517 Board (Part Number: AC164127-7)
B グラフィック液晶(WQVGA、4.3インチ): マイクロチップ Graphics Display Powertip 4.3in.
480x272 Board (Part Number: AC164127-6)
・ 開発環境 Harmony ver.1.05、 XC32 ver.1.40、 MPLABX 3.05 PIC32MZ2048ECH144
revison 5
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //-------------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_Screen1) return; GFX_HGC_ChangeScreen(Screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_Screen2) return; GFX_HGC_ChangeScreen(Screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_Screen3) return; GFX_HGC_ChangeScreen(Screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_init.c //--------------------------------------------------------------------------------- /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = ON #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = ON #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = ON #pragma config IESO = ON #pragma config POSCMOD = EC #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = ON #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = ON /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ #pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ #pragma config UPLLEN = ON /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** //<editor-fold defaultstate="collapsed" desc="DRV_PMP Initialization Data"> // </editor-fold> //<editor-fold defaultstate="collapsed" desc="DRV_GFX_S1D13517 Initialization Data"> /*** DRV GFX Initialization Data ***/ DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_S1D13517_Open, .drvInterfaceSet = DRV_GFX_S1D13517_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); SYS_DEVCON_JTAGDisable(); SYS_PORTS_Initialize(); SYS_DEVCON_SystemUnlock(); //PMP??????????????100MH???25MH? PB2DIVbits.PBDIV = 0x03; //PBCLK2 is SYSCLK divided by 4 // PMP SPI 1/4 = 100MHz / 4 = 25MHz SYS_DEVCON_SystemLock(); /* Board Support Package Initialization */ //BSP_Initialize(); /* Initialize Drivers */ /*Initialize PMP0 */ DRV_PMP0_Initialize(); DRV_PMP0_ModeConfig(); DRV_GFX_S1D13517_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize System Services */ /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、system_config.h //---------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony System Configuration Header File Name: system_config.h Summary: Build-time configuration header for the system defined by this MPLAB Harmony project. Description: An MPLAB Project may have multiple configurations. This file defines the build-time options for a single configuration. Remarks: This configuration header must not define any prototypes or data definitions (or include any files that do). It only provides macro definitions for build-time configuration options that are not instantiated until used by another MPLAB Harmony module or application. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _SYSTEM_CONFIG_H #define _SYSTEM_CONFIG_H /* This is a temporary workaround for an issue with the peripheral library "Exists" functions that causes superfluous warnings. It "nulls" out the definition of The PLIB function attribute that causes the warning. Once that issue has been resolved, this definition should be removed. */ #define _PLIB_UNSUPPORTED // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** /* This section Includes other configuration headers necessary to completely define this configuration. */ //#include "bsp_config.h" // ***************************************************************************** // ***************************************************************************** // Section: System Service Configuration // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Common System Service Configuration Options */ #define SYS_VERSION_STR "1.05" #define SYS_VERSION 10500 // ***************************************************************************** /* Clock System Service Configuration Options */ #define SYS_CLK_FREQ 200000000ul #define SYS_CLK_BUS_PERIPHERAL_1 100000000ul #define SYS_CLK_BUS_PERIPHERAL_2 100000000ul #define SYS_CLK_BUS_PERIPHERAL_3 100000000ul #define SYS_CLK_BUS_PERIPHERAL_4 100000000ul #define SYS_CLK_BUS_PERIPHERAL_5 100000000ul #define SYS_CLK_BUS_PERIPHERAL_7 200000000ul #define SYS_CLK_BUS_PERIPHERAL_8 100000000ul #define SYS_CLK_CONFIG_PRIMARY_XTAL 24000000ul #define SYS_CLK_CONFIG_SECONDARY_XTAL 0ul /*** Ports System Service Configuration ***/ #define SYS_PORT_B_ANSEL 0x8fdf #define SYS_PORT_B_TRIS 0xffdf #define SYS_PORT_B_LAT 0x0 #define SYS_PORT_B_ODC 0x0 #define SYS_PORT_B_CNPU 0x7000 #define SYS_PORT_B_CNPD 0x0 #define SYS_PORT_B_CNEN 0x0 #define SYS_PORT_C_ANSEL 0xe006 #define SYS_PORT_C_TRIS 0xf01e #define SYS_PORT_C_LAT 0x0 #define SYS_PORT_C_ODC 0x0 #define SYS_PORT_C_CNPU 0x0 #define SYS_PORT_C_CNPD 0x0 #define SYS_PORT_C_CNEN 0x0 #define SYS_PORT_E_ANSEL 0x300 #define SYS_PORT_E_TRIS 0x3ff #define SYS_PORT_E_LAT 0x0 #define SYS_PORT_E_ODC 0x0 #define SYS_PORT_E_CNPU 0x0 #define SYS_PORT_E_CNPD 0x0 #define SYS_PORT_E_CNEN 0x0 #define SYS_PORT_G_ANSEL 0x0 #define SYS_PORT_G_TRIS 0xf3c3 #define SYS_PORT_G_LAT 0x0 #define SYS_PORT_G_ODC 0x0 #define SYS_PORT_G_CNPU 0x0 #define SYS_PORT_G_CNPD 0x0 #define SYS_PORT_G_CNEN 0x0 #define SYS_PORT_H_ANSEL 0x70 #define SYS_PORT_H_TRIS 0xfff8 #define SYS_PORT_H_LAT 0x0 #define SYS_PORT_H_ODC 0x0 #define SYS_PORT_H_CNPU 0x0 #define SYS_PORT_H_CNPD 0x0 #define SYS_PORT_H_CNEN 0x0 // ***************************************************************************** // ***************************************************************************** // Section: Driver Configuration // ***************************************************************************** // ***************************************************************************** #define GFX_USE_DISPLAY_CONTROLLER_S1D13517 /*** Graphics Display Configuration ***/ #define DISP_ORIENTATION 0 #define DISP_HOR_RESOLUTION 480 #define DISP_VER_RESOLUTION 272 #define DISP_DATA_WIDTH 24 #define DISP_HOR_PULSE_WIDTH 42 #define DISP_HOR_BACK_PORCH 2 #define DISP_HOR_FRONT_PORCH 2 #define DISP_VER_PULSE_WIDTH 10 #define DISP_VER_BACK_PORCH 2 #define DISP_VER_FRONT_PORCH 2 #define DISP_INV_LSHIFT 0 #define GFX_LCD_TYPE GFX_LCD_TFT #define BACKLIGHT_ENABLE_LEVEL 1 #define BACKLIGHT_DISABLE_LEVEL 0 #define TCON_MODULE NULL #define TOUCHCAL_ULX 0x0099 #define TOUCHCAL_ULY 0x00FF #define TOUCHCAL_URX 0x0369 #define TOUCHCAL_URY 0x00F1 #define TOUCHCAL_LLX 0x00AC #define TOUCHCAL_LLY 0x032A #define TOUCHCAL_LRX 0x0368 #define TOUCHCAL_LRY 0x033C // DOM-IGNORE-END #define USE_8BIT_PMP // ***************************************************************************** // ***************************************************************************** // Section: Middleware & Other Library Configuration // ***************************************************************************** // ***************************************************************************** /*** GFX Library Configuration ***/ #define GFX_INSTANCES_NUMBER 1 #define GFX_SELF_PREEMPTION_LEVEL 0 #define GFX_CONFIG_COLOR_DEPTH 16 #define GFX_CONFIG_FONT_CHAR_SIZE 8 #define GFX_CONFIG_FONT_EXTERNAL_DISABLE #define GFX_CONFIG_FONT_RAM_DISABLE #define GFX_CONFIG_IMAGE_EXTERNAL_DISABLE #define GFX_CONFIG_IMAGE_RAM_DISABLE #define GFX_CONFIG_ALPHABLEND_DISABLE #define GFX_CONFIG_GRADIENT_DISABLE #define GFX_CONFIG_PALETTE_DISABLE #define GFX_CONFIG_FONT_ANTIALIASED_DISABLE #define GFX_CONFIG_TRANSPARENT_COLOR_DISABLE #define GFX_CONFIG_PALETTE_EXTERNAL_DISABLE #define GFX_CONFIG_DOUBLE_BUFFERING_DISABLE #define GFX_CONFIG_USE_KEYBOARD_DISABLE #define GFX_CONFIG_USE_TOUCHSCREEN_DISABLE #define GFX_CONFIG_GOL_DISABLE // ***************************************************************************** /* BSP Configuration Options */ #define BSP_OSC_FREQUENCY 24000000 #endif // _SYSTEM_CONFIG_H /******************************************************************************* End of File */ //以下、system_definition.h //--------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "driver/gfx/controller/s1d13517/drv_gfx_s1d13517.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #if defined (__PIC32MX__) // Definitions for reset pin #define DisplayResetConfig() TRISCCLR = _TRISC_TRISC1_MASK #define DisplayResetEnable() LATCCLR = _LATC_LATC1_MASK #define DisplayResetDisable() LATCSET = _LATC_LATC1_MASK // Definitions for RS pin #define DisplayCmdDataConfig() TRISCCLR = _TRISC_TRISC2_MASK #define DisplaySetCommand() LATCCLR = _LATC_LATC2_MASK #define DisplaySetData() LATCSET = _LATC_LATC2_MASK // Definitions for CS pin #define DisplayConfig() TRISDCLR = _TRISD_TRISD10_MASK #define DisplayEnable() LATDCLR = _LATD_LATD10_MASK #define DisplayDisable() LATDSET = _LATD_LATD10_MASK // Definitions for backlight control pin #define DisplayBacklightConfig() (TRISDbits.TRISD0 = 0) #define DisplayBacklightOn() (LATDbits.LATD0 = BACKLIGHT_ENABLE_LEVEL) #define DisplayBacklightOff() (LATDbits.LATD0 = BACKLIGHT_DISABLE_LEVEL) #else //// Definitions for reset pin PIC32MZ //RG12 <-- RB11 #define DisplayResetConfig() TRISGCLR = _TRISG_TRISG12_MASK #define DisplayResetEnable() LATGCLR = _LATG_LATG12_MASK #define DisplayResetDisable() LATGSET = _LATG_LATG12_MASK //#define DisplayResetConfig() TRISBCLR = _TRISB_TRISB11_MASK //#define DisplayResetEnable() LATBCLR = _LATB_LATB11_MASK //#define DisplayResetDisable() LATBSET = _LATB_LATB11_MASK //// Definitions for RS pin PIC32MZ //RG13 <-- RB12 #define DisplayCmdDataConfig() TRISGCLR = _TRISG_TRISG13_MASK #define DisplaySetCommand() LATGCLR = _LATG_LATG13_MASK #define DisplaySetData() LATGSET = _LATG_LATG13_MASK //#define DisplayCmdDataConfig() TRISBCLR = _TRISB_TRISB12_MASK //#define DisplaySetCommand() LATBCLR = _LATB_LATB12_MASK //#define DisplaySetData() LATBSET = _LATB_LATB12_MASK //// Definitions for CS pin PIC32MZ //RG14 <-- RJ5 #define DisplayConfig() TRISGCLR = _TRISG_TRISG14_MASK #define DisplayEnable() LATGCLR = _LATG_LATG14_MASK #define DisplayDisable() LATGSET = _LATG_LATG14_MASK //#define DisplayConfig() TRISJCLR = _TRISJ_TRISJ5_MASK //#define DisplayEnable() LATJCLR = _LATJ_LATJ5_MASK //#define DisplayDisable() LATJSET = _LATJ_LATJ5_MASK // Definitions for backlight control pin PIC32MZ #define DisplayBacklightConfig() (TRISJbits.TRISJ6 = 0) #define DisplayBacklightOn() (LATJbits.LATJ6 = BACKLIGHT_ENABLE_LEVEL) #define DisplayBacklightOff() (LATJbits.LATJ6 = BACKLIGHT_DISABLE_LEVEL) #endif // Definitions for FLASH CS pin #define DisplayFlashConfig() #define DisplayFlashEnable() #define DisplayFlashDisable() // Definitions for POWER ON pin #define DisplayPowerConfig() #define DisplayPowerOn() #define DisplayPowerOff() // ADC channel constants // resistive touch X and Y voltage sensing #define ADC_XPOS (0xB << _AD1CHS_CH0SA_POSITION) #define ADC_YPOS (0xA << _AD1CHS_CH0SA_POSITION) #define ADPCFG_XPOS AD1PCFGbits.PCFG11 #define ADPCFG_YPOS AD1PCFGbits.PCFG10 #define RESISTIVETOUCH_ANALOG 0 #define RESISTIVETOUCH_DIGITAL 1 #define ResistiveTouchScreen_XMinus_Drive_High() LATDbits.LATD9 = 1 #define ResistiveTouchScreen_XMinus_Drive_Low() LATDbits.LATD9 = 0 #define ResistiveTouchScreen_XMinus_Config_As_Input() TRISDbits.TRISD9 = 1 #define ResistiveTouchScreen_XMinus_Config_As_Output() TRISDbits.TRISD9 = 0 #define ResistiveTouchScreen_YMinus_Drive_High() LATDbits.LATD8 = 1 #define ResistiveTouchScreen_YMinus_Drive_Low() LATDbits.LATD8 = 0 #define ResistiveTouchScreen_YMinus_Config_As_Input() TRISDbits.TRISD8 = 1 #define ResistiveTouchScreen_YMinus_Config_As_Output() TRISDbits.TRISD8 = 0 // X port definitions #define ResistiveTouchScreen_XPlus_Drive_High() LATBbits.LATB11 = 1 #define ResistiveTouchScreen_XPlus_Drive_Low() LATBbits.LATB11 = 0 #define ResistiveTouchScreen_XPlus_Config_As_Input() TRISBbits.TRISB11 = 1 #define ResistiveTouchScreen_XPlus_Config_As_Output() TRISBbits.TRISB11 = 0 // Y port definitions #define ResistiveTouchScreen_YPlus_Drive_High() LATBbits.LATB10 = 1 #define ResistiveTouchScreen_YPlus_Drive_Low() LATBbits.LATB10 = 0 #define ResistiveTouchScreen_YPlus_Config_As_Input() TRISBbits.TRISB10 = 1 #define ResistiveTouchScreen_YPlus_Config_As_Output() TRISBbits.TRISB10 = 0 // Potentiometer and Temperature sensor #define ADC_TEMP ADC_CH0_POS_SAMPLEA_AN4 #define TOUCH_ADC_INPUT_SEL AD1CHS // ADC Sample Start #define TOUCH_ADC_START AD1CON1bits.SAMP // ADC Status #define TOUCH_ADC_DONE AD1CON1bits.DONE #define ADDRESS_RESISTIVE_TOUCH_VERSION (unsigned long)0xFFFFFFFE #define ADDRESS_RESISTIVE_TOUCH_ULX (unsigned long)0xFFFFFFFC #define ADDRESS_RESISTIVE_TOUCH_ULY (unsigned long)0xFFFFFFFA #define ADDRESS_RESISTIVE_TOUCH_URX (unsigned long)0xFFFFFFF8 #define ADDRESS_RESISTIVE_TOUCH_URY (unsigned long)0xFFFFFFF6 #define ADDRESS_RESISTIVE_TOUCH_LLX (unsigned long)0xFFFFFFF4 #define ADDRESS_RESISTIVE_TOUCH_LLY (unsigned long)0xFFFFFFF2 #define ADDRESS_RESISTIVE_TOUCH_LRX (unsigned long)0xFFFFFFF0 #define ADDRESS_RESISTIVE_TOUCH_LRY (unsigned long)0xFFFFFFEE #define SST25_CS_TRIS TRISDbits.TRISD1 #define SST25_CS_LAT LATDbits.LATD1 #define SST25_SCK_TRIS TRISGbits.TRISG6 #define SST25_SDO_TRIS TRISGbits.TRISG8 #define SST25_SDI_TRIS TRISGbits.TRISG7 #define USE_GFX_PMP #define PMP_DATA_SETUP_TIME (18) #define PMP_DATA_WAIT_TIME (82) // based on the minimum pulse width requirement of CS signal of SSD1926 #define PMP_DATA_HOLD_TIME (0) #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */
<実行結果>
1. ピクチャー
モード | 各液晶画面 |
primitive 画面@ | |
primitive 画面A | |
primitive 画面B |
2. 動画 ---> YouYube
■ マイクロチップ デモソフト”Primitive + Hellow” at PIC32MZ + SSD1926 ボード + QVGA
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048ECH100
A グラフィック制御ボード(グラフィックコントローラS1D13517): マイクロチップ Graphics LCD Controller
PICtail Plus SSD1926 Board (Part Number: AC164127-5)
B グラフィック液晶(WQVGA、4.3インチ): マイクロチップ Graphics Display Truly 240x320
QVGA 3.2" Board (Part Number: AC164127-4)
・ primitive には3画面あるが、1画面を追加して ”Hellow World !!”を表示すること。
・ 開発環境 Harmony ver.1.05、 XC32 ver.1.40、 MPLABX 3.05 PIC32MZ2048ECH100
revison 5
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、 main.c //---------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.h //----------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Application Header File Company: Microchip Technology Inc. File Name: app.h Summary: This header file provides prototypes and definitions for the application. Description: This header file provides function prototypes and data type definitions for the application. Some of these are required by the system (such as the "APP_Initialize" and "APP_Tasks" prototypes) and some of them are only used internally by the application (such as the "APP_STATES" definition). Both are defined here for convenience. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _APP_H #define _APP_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include "system_config.h" #include "system_definitions.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application states Summary: Application states enumeration Description: This enumeration defines the valid application states. These states determine the behavior of the application at various times. */ typedef enum { /* Application pixels put*/ APP_STATE_INIT=0, /* Application primitive draw */ //APP_PRIMITIVE_DRAW, APP_HGC_SCREEN1_DRAW, APP_HGC_SCREEN2_DRAW, APP_HGC_SCREEN3_DRAW, APP_HGC_SCREEN4_DRAW, /* Application done */ APP_STATE_DONE, } APP_STATES; // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: Application strings and buffers are be defined outside this structure. */ typedef struct { /* Application's current state*/ APP_STATES state; GFX_HANDLE gfxHandle[GFX_INSTANCES_NUMBER]; } APP_DATA; // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Routines // ***************************************************************************** // ***************************************************************************** /* These routines are called by drivers when certain events occur. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Summary: MPLAB Harmony application initialization routine. Description: This function initializes the Harmony application. It places the application in its initial state and prepares it to run so that its APP_Tasks function can be called. Precondition: All other system initialization routines should be called before calling this routine (in "SYS_Initialize"). Parameters: None. Returns: None. Example: <code> APP_Initialize(); </code> Remarks: This routine must be called from the SYS_Initialize function. */ void APP_Initialize ( void ); /******************************************************************************* Function: void APP_Tasks ( void ) Summary: MPLAB Harmony Demo application tasks function Description: This routine is the Harmony Demo application's tasks function. It defines the application's state machine and core logic. Precondition: The system and application initialization ("SYS_Initialize") should be called before calling this. Parameters: None. Returns: None. Example: <code> APP_Tasks(); </code> Remarks: This routine must be called from SYS_Tasks() routine. */ void APP_Tasks( void ); #endif /* _APP_H */ /******************************************************************************* End of File */ //以下、app.c //----------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen4); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN4_DRAW; break; } case APP_HGC_SCREEN4_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen4) return; GFX_HGC_ChangeScreen(screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_config.h //------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony System Configuration Header File Name: system_config.h Summary: Build-time configuration header for the system defined by this MPLAB Harmony project. Description: An MPLAB Project may have multiple configurations. This file defines the build-time options for a single configuration. Remarks: This configuration header must not define any prototypes or data definitions (or include any files that do). It only provides macro definitions for build-time configuration options that are not instantiated until used by another MPLAB Harmony module or application. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _SYSTEM_CONFIG_H #define _SYSTEM_CONFIG_H /* This is a temporary workaround for an issue with the peripheral library "Exists" functions that causes superfluous warnings. It "nulls" out the definition of The PLIB function attribute that causes the warning. Once that issue has been resolved, this definition should be removed. */ #define _PLIB_UNSUPPORTED // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** /* This section Includes other configuration headers necessary to completely define this configuration. */ // ***************************************************************************** // ***************************************************************************** // Section: System Service Configuration // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Common System Service Configuration Options */ #define SYS_VERSION_STR "1.05" #define SYS_VERSION 10500 // ***************************************************************************** /* Clock System Service Configuration Options */ #define SYS_CLK_FREQ 200000000ul #define SYS_CLK_BUS_PERIPHERAL_1 100000000ul #define SYS_CLK_BUS_PERIPHERAL_2 100000000ul #define SYS_CLK_BUS_PERIPHERAL_3 100000000ul #define SYS_CLK_BUS_PERIPHERAL_4 100000000ul #define SYS_CLK_BUS_PERIPHERAL_5 100000000ul #define SYS_CLK_BUS_PERIPHERAL_7 200000000ul #define SYS_CLK_BUS_PERIPHERAL_8 100000000ul #define SYS_CLK_CONFIG_PRIMARY_XTAL 24000000ul #define SYS_CLK_CONFIG_SECONDARY_XTAL 0ul /*** Ports System Service Configuration ***/ #define SYS_PORT_C_ANSEL 0xf006 #define SYS_PORT_C_TRIS 0xf01e #define SYS_PORT_C_LAT 0x0 #define SYS_PORT_C_ODC 0x0 #define SYS_PORT_C_CNPU 0x0 #define SYS_PORT_C_CNPD 0x0 #define SYS_PORT_C_CNEN 0x0 #define SYS_PORT_E_ANSEL 0x300 #define SYS_PORT_E_TRIS 0x3ff #define SYS_PORT_E_LAT 0x0 #define SYS_PORT_E_ODC 0x0 #define SYS_PORT_E_CNPU 0x0 #define SYS_PORT_E_CNPD 0x0 #define SYS_PORT_E_CNEN 0x0 // ***************************************************************************** // ***************************************************************************** // Section: Driver Configuration // ***************************************************************************** // ***************************************************************************** #define GFX_USE_DISPLAY_CONTROLLER_SSD1926 /*** Graphics Display Configuration ***/ #define DISP_ORIENTATION 90 #define DISP_HOR_RESOLUTION 240 #define DISP_VER_RESOLUTION 320 #define DISP_DATA_WIDTH 18 #define DISP_HOR_PULSE_WIDTH 25 #define DISP_HOR_BACK_PORCH 5 #define DISP_HOR_FRONT_PORCH 10 #define DISP_VER_PULSE_WIDTH 4 #define DISP_VER_BACK_PORCH 0 #define DISP_VER_FRONT_PORCH 2 #define DISP_INV_LSHIFT 1 #define GFX_LCD_TYPE GFX_LCD_TFT #define BACKLIGHT_ENABLE_LEVEL 0 #define BACKLIGHT_DISABLE_LEVEL 1 #define USE_TCON_SSD1289 #define TCON_MODULE GFX_TCON_SSD1289Init #define USE_TCON_MODULE 0 #define GFX_USE_TCON_CUSTOM #define TOUCHCAL_ULX 0x00C0 #define TOUCHCAL_ULY 0x00D4 #define TOUCHCAL_URX 0x037C #define TOUCHCAL_URY 0x00D7 #define TOUCHCAL_LLX 0x00B9 #define TOUCHCAL_LLY 0x0350 #define TOUCHCAL_LRX 0x035A #define TOUCHCAL_LRY 0x0333 // DOM-IGNORE-END #define USE_8BIT_PMP // ***************************************************************************** // ***************************************************************************** // Section: Middleware & Other Library Configuration // ***************************************************************************** // ***************************************************************************** /*** GFX Library Configuration ***/ #define GFX_INSTANCES_NUMBER 1 #define GFX_SELF_PREEMPTION_LEVEL 0 #define GFX_CONFIG_COLOR_DEPTH 16 #define GFX_CONFIG_FONT_CHAR_SIZE 8 #define GFX_CONFIG_FONT_EXTERNAL_DISABLE #define GFX_CONFIG_FONT_RAM_DISABLE #define GFX_CONFIG_IMAGE_EXTERNAL_DISABLE #define GFX_CONFIG_IMAGE_RAM_DISABLE #define GFX_CONFIG_GRADIENT_DISABLE #define GFX_CONFIG_PALETTE_DISABLE #define GFX_CONFIG_FONT_ANTIALIASED_DISABLE #define GFX_CONFIG_TRANSPARENT_COLOR_DISABLE #define GFX_CONFIG_PALETTE_EXTERNAL_DISABLE #define GFX_CONFIG_DOUBLE_BUFFERING_DISABLE #define GFX_CONFIG_USE_KEYBOARD_DISABLE #define GFX_CONFIG_USE_TOUCHSCREEN_DISABLE #define GFX_CONFIG_FOCUS_DISABLE #define GFX_malloc(size) malloc(size) #define GFX_free(pObj) free(pObj) #endif // _SYSTEM_CONFIG_H /******************************************************************************* End of File */ //以下、system_definition.h //----------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; extern void GFX_TCON_SSD1289Init(void); //// Definitions for reset pin PIC32MZ //RG12 <-- RB11 #define DisplayResetConfig() TRISGCLR = _TRISG_TRISG12_MASK #define DisplayResetEnable() LATGCLR = _LATG_LATG12_MASK #define DisplayResetDisable() LATGSET = _LATG_LATG12_MASK //#define DisplayResetConfig() TRISBCLR = _TRISB_TRISB11_MASK //#define DisplayResetEnable() LATBCLR = _LATB_LATB11_MASK //#define DisplayResetDisable() LATBSET = _LATB_LATB11_MASK //// Definitions for RS pin PIC32MZ //RG13 <-- RB12 #define DisplayCmdDataConfig() TRISGCLR = _TRISG_TRISG13_MASK #define DisplaySetCommand() LATGCLR = _LATG_LATG13_MASK #define DisplaySetData() LATGSET = _LATG_LATG13_MASK //#define DisplayCmdDataConfig() TRISBCLR = _TRISB_TRISB12_MASK //#define DisplaySetCommand() LATBCLR = _LATB_LATB12_MASK //#define DisplaySetData() LATBSET = _LATB_LATB12_MASK //// Definitions for CS pin PIC32MZ //RG14 <-- RJ5 #define DisplayConfig() TRISGCLR = _TRISG_TRISG14_MASK #define DisplayEnable() LATGCLR = _LATG_LATG14_MASK #define DisplayDisable() LATGSET = _LATG_LATG14_MASK //#define DisplayConfig() TRISJCLR = _TRISJ_TRISJ5_MASK //#define DisplayEnable() LATJCLR = _LATJ_LATJ5_MASK //#define DisplayDisable() LATJSET = _LATJ_LATJ5_MASK // Definitions for backlight control pin PIC32MZ #define DisplayBacklightConfig() #define DisplayBacklightOn() #define DisplayBacklightOff() /* // Definitions for backlight control pin PIC32MZ #define DisplayBacklightConfig() (TRISJbits.TRISJ6 = 0) #define DisplayBacklightOn() (LATJbits.LATJ6 = BACKLIGHT_ENABLE_LEVEL) #define DisplayBacklightOff() (LATJbits.LATJ6 = BACKLIGHT_DISABLE_LEVEL) */ // Definitions for FLASH CS pin #define DisplayFlashConfig() #define DisplayFlashEnable() #define DisplayFlashDisable() // Definitions for POWER ON pin #define DisplayPowerConfig() #define DisplayPowerOn() #define DisplayPowerOff() // ADC channel constants // resistive touch X and Y voltage sensing #define ADC_XPOS (0xB << _AD1CHS_CH0SA_POSITION) #define ADC_YPOS (0xA << _AD1CHS_CH0SA_POSITION) #define ADPCFG_XPOS AD1PCFGbits.PCFG11 #define ADPCFG_YPOS AD1PCFGbits.PCFG10 #define RESISTIVETOUCH_ANALOG 0 #define RESISTIVETOUCH_DIGITAL 1 #define ResistiveTouchScreen_XMinus_Drive_High() LATDbits.LATD9 = 1 #define ResistiveTouchScreen_XMinus_Drive_Low() LATDbits.LATD9 = 0 #define ResistiveTouchScreen_XMinus_Config_As_Input() TRISDbits.TRISD9 = 1 #define ResistiveTouchScreen_XMinus_Config_As_Output() TRISDbits.TRISD9 = 0 #define ResistiveTouchScreen_YMinus_Drive_High() LATDbits.LATD8 = 1 #define ResistiveTouchScreen_YMinus_Drive_Low() LATDbits.LATD8 = 0 #define ResistiveTouchScreen_YMinus_Config_As_Input() TRISDbits.TRISD8 = 1 #define ResistiveTouchScreen_YMinus_Config_As_Output() TRISDbits.TRISD8 = 0 // X port definitions #define ResistiveTouchScreen_XPlus_Drive_High() LATBbits.LATB11 = 1 #define ResistiveTouchScreen_XPlus_Drive_Low() LATBbits.LATB11 = 0 #define ResistiveTouchScreen_XPlus_Config_As_Input() TRISBbits.TRISB11 = 1 #define ResistiveTouchScreen_XPlus_Config_As_Output() TRISBbits.TRISB11 = 0 // Y port definitions #define ResistiveTouchScreen_YPlus_Drive_High() LATBbits.LATB10 = 1 #define ResistiveTouchScreen_YPlus_Drive_Low() LATBbits.LATB10 = 0 #define ResistiveTouchScreen_YPlus_Config_As_Input() TRISBbits.TRISB10 = 1 #define ResistiveTouchScreen_YPlus_Config_As_Output() TRISBbits.TRISB10 = 0 // Potentiometer and Temperature sensor #define ADC_TEMP ADC_CH0_POS_SAMPLEA_AN4 #define TOUCH_ADC_INPUT_SEL AD1CHS // ADC Sample Start #define TOUCH_ADC_START AD1CON1bits.SAMP // ADC Status #define TOUCH_ADC_DONE AD1CON1bits.DONE #define ADDRESS_RESISTIVE_TOUCH_VERSION (unsigned long)0xFFFFFFFE #define ADDRESS_RESISTIVE_TOUCH_ULX (unsigned long)0xFFFFFFFC #define ADDRESS_RESISTIVE_TOUCH_ULY (unsigned long)0xFFFFFFFA #define ADDRESS_RESISTIVE_TOUCH_URX (unsigned long)0xFFFFFFF8 #define ADDRESS_RESISTIVE_TOUCH_URY (unsigned long)0xFFFFFFF6 #define ADDRESS_RESISTIVE_TOUCH_LLX (unsigned long)0xFFFFFFF4 #define ADDRESS_RESISTIVE_TOUCH_LLY (unsigned long)0xFFFFFFF2 #define ADDRESS_RESISTIVE_TOUCH_LRX (unsigned long)0xFFFFFFF0 #define ADDRESS_RESISTIVE_TOUCH_LRY (unsigned long)0xFFFFFFEE #define SST25_CS_TRIS TRISDbits.TRISD1 #define SST25_CS_LAT LATDbits.LATD1 #define SST25_SCK_TRIS TRISGbits.TRISG6 #define SST25_SDO_TRIS TRISGbits.TRISG8 #define SST25_SDI_TRIS TRISGbits.TRISG7 #define USE_GFX_PMP #define PMP_DATA_SETUP_TIME (18) #define PMP_DATA_WAIT_TIME (82) // based on the minimum pulse width requirement of CS signal of SSD1926 #define PMP_DATA_HOLD_TIME (0) #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */ //以下、system_init.c //-------------------------------------------------------------------------------------- /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = OFF #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = OFF #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = OFF #pragma config IESO = OFF #pragma config POSCMOD = OFF #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = OFF #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = OFF /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ #pragma config FPLLICLK = PLL_FRC //内蔵高速発振器選択 //★★★ バグ有 主発振回路選択の時、FPLLICLK = PLL_POSCではなくFPLLICLK = PLL_FRCを選択する。(at ver.1.33 XC32) //#pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ #pragma config UPLLEN = OFF /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** //<editor-fold defaultstate="collapsed" desc="DRV_PMP Initialization Data"> // </editor-fold> //<editor-fold defaultstate="collapsed" desc="DRV_GFX_SSD1926 Initialization Data"> /*** DRV GFX Initialization Data ***/ DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_SSD1926_Open, .drvInterfaceSet = DRV_GFX_SSD1926_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); SYS_PORTS_Initialize(); /* Initialize Drivers */ /*Initialize PMP0 */ DRV_PMP0_Initialize(); DRV_PMP0_ModeConfig(); DRV_GFX_SSD1926_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize System Services */ /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP static const GFX_XCHAR staticTextStr_1[] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x21, 0x21, 0x0 }; // Hellow World !! /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen4: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen4: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen4); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen4: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen4); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen4: GFX_HGC_SetupScreen(screen4); GFX_HGC_DrawScreen_GOL(screen4); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen4); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen4: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen4); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen4: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen4); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen4: GFX_HGC_DrawScreen_Primitives(screen4); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen4); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen4: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen4); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen4: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen4: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; case screen4: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen4); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; case screen4: GFX_HGC_DrawItem(StaticText2); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; case screen4: break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case StaticText2: hgcObj.pStaticText2Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText2, // button ID GFX_STATICTEXT_LEFT_1, // left GFX_STATICTEXT_TOP_1, // top GFX_STATICTEXT_RIGHT_1, // right GFX_STATICTEXT_BOTTOM_1, // bottom GFX_STATICTEXT_STATE_1, // state (GFX_XCHAR*)staticTextStr_1, // text GFX_STATICTEXT_ALIGNMENT_1, //alignment GFX_STATICTEXT_SCHEME_1 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 267, // p1x 0, // p1y 53, // p2x 239); // p2y break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 214, // p1x 0, // p1y 106, // p2x 239); // p2y break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 106, // p1x 0, // p1y 214, // p2x 239); // p2y break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 53, // p1x 0, // p1y 267, // p2x 239); // p2y break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160, // p1x 0, // p1y 160, // p2x 239); // p2y break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 239, // p1y 319, // p2x 0); // p2y break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 319, // p2x 239); // p2y break; } case Line4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 319, // p1x 0, // p1y 319, // p2x 239); // p2y break; } case Line3: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 239); // p2y break; } case Line2: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 239, // p1y 319, // p2x 239); // p2y break; } case Line1: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 319, // p2x 0); // p2y break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 65, // p1x 30, // p1y 255, // p2x 210); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 80, // p1x 45, // p1y 240, // p2x 195); // p2y break; } case Rectangle1: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 125, // p1x 90, // p1y 195, // p2x 150); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 125, // p1x 90, // p1y 195, // p2x 150); // p2y break; } case Rectangle3: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 110, // p1x 75, // p1y 210, // p2x 165); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 110, // p1x 75, // p1y 210, // p2x 165); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 95, // p1x 60, // p1y 225, // p2x 180); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 95, // p1x 60, // p1y 225, // p2x 180); // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 55); // radius break; } case Circle5: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 68); // radius break; } case Circle4: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 81); // radius break; } case Circle3: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 94); // radius break; } case Circle2: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 107); // radius break; } case Circle1: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 120); // radius break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } }
<実行結果>
1. ピクチャー
以下、各画面
液晶画面 | |
@ | |
A | |
B | |
C |
2. 動画 ----> You Tube
■ マイクロチップ デモソフト”Primitive” at PIC32MZ + INT035
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048EFH100
A 液晶: (株)ディスプレーテック INT035-TS QVGA、3.5インチ
・ 開発環境 Harmony ver.1.06、 XC32 ver.1.40、 MPLABX 3.06 PIC32MZ2048EFH revison 1
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //----------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //----------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" #include "1lcd_lib_C32.h" int delay_Clock = 200000000; //200MHz void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、app.h //----------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Application Header File Company: Microchip Technology Inc. File Name: app.h Summary: This header file provides prototypes and definitions for the application. Description: This header file provides function prototypes and data type definitions for the application. Some of these are required by the system (such as the "APP_Initialize" and "APP_Tasks" prototypes) and some of them are only used internally by the application (such as the "APP_STATES" definition). Both are defined here for convenience. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _APP_H #define _APP_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include "system_config.h" #include "system_definitions.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application states Summary: Application states enumeration Description: This enumeration defines the valid application states. These states determine the behavior of the application at various times. */ typedef enum { /* Application pixels put*/ APP_STATE_INIT=0, /* Application primitive draw */ //APP_PRIMITIVE_DRAW, APP_HGC_SCREEN1_DRAW, APP_HGC_SCREEN2_DRAW, APP_HGC_SCREEN3_DRAW, /* Application done */ APP_STATE_DONE, } APP_STATES; // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: Application strings and buffers are be defined outside this structure. */ typedef struct { /* Application's current state*/ APP_STATES state; GFX_HANDLE gfxHandle[GFX_INSTANCES_NUMBER]; } APP_DATA; // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Routines // ***************************************************************************** // ***************************************************************************** /* These routines are called by drivers when certain events occur. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Summary: MPLAB Harmony application initialization routine. Description: This function initializes the Harmony application. It places the application in its initial state and prepares it to run so that its APP_Tasks function can be called. Precondition: All other system initialization routines should be called before calling this routine (in "SYS_Initialize"). Parameters: None. Returns: None. Example: <code> APP_Initialize(); </code> Remarks: This routine must be called from the SYS_Initialize function. */ void APP_Initialize ( void ); /******************************************************************************* Function: void APP_Tasks ( void ) Summary: MPLAB Harmony Demo application tasks function Description: This routine is the Harmony Demo application's tasks function. It defines the application's state machine and core logic. Precondition: The system and application initialization ("SYS_Initialize") should be called before calling this. Parameters: None. Returns: None. Example: <code> APP_Tasks(); </code> Remarks: This routine must be called from SYS_Tasks() routine. */ void APP_Tasks( void ); #endif /* _APP_H */ /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //------------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 267, // p1x 0, // p1y 53, // p2x 239); // p2y break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 214, // p1x 0, // p1y 106, // p2x 239); // p2y break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 106, // p1x 0, // p1y 214, // p2x 239); // p2y break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 53, // p1x 0, // p1y 267, // p2x 239); // p2y break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160, // p1x 0, // p1y 160, // p2x 239); // p2y break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 239, // p1y 319, // p2x 0); // p2y break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 319, // p2x 239); // p2y break; } case Line4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 319, // p1x 0, // p1y 319, // p2x 239); // p2y break; } case Line3: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 239); // p2y break; } case Line2: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 239, // p1y 319, // p2x 239); // p2y break; } case Line1: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 319, // p2x 0); // p2y break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 65, // p1x 30, // p1y 255, // p2x 210); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 80, // p1x 45, // p1y 240, // p2x 195); // p2y break; } case Rectangle1: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 125, // p1x 90, // p1y 195, // p2x 150); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 125, // p1x 90, // p1y 195, // p2x 150); // p2y break; } case Rectangle3: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 110, // p1x 75, // p1y 210, // p2x 165); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 110, // p1x 75, // p1y 210, // p2x 165); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 95, // p1x 60, // p1y 225, // p2x 180); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 95, // p1x 60, // p1y 225, // p2x 180); // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 55); // radius break; } case Circle5: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 68); // radius break; } case Circle4: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 81); // radius break; } case Circle3: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 94); // radius break; } case Circle2: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 107); // radius break; } case Circle1: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 160, // p1x 120, // p1y 120); // radius break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } //以下、gfx_hgc_definitions.h //----------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Definitions Header File Name: gfx_hgc_definitions.h Summary: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Description: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _GFX_HGC_DEFINITIONS_H #define _GFX_HGC_DEFINITIONS_H #include "system_config.h" #include "system_definitions.h" typedef enum { HGC_STATE_INIT = 0, HGC_STATE_RUNNING } HGC_STATES; typedef enum { HGC_SCREEN_STATE_INIT = 0, HGC_SCREEN_STATE_SETUP_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1, HGC_SCREEN_STATE_SETUP_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2, HGC_SCREEN_STATE_SETUP_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3, } HGC_SCREEN_STATES; /*** GFX GOL Scheme Definitions ***/ #define GFX_SCHEME_NAME_0 "default" #define GFX_SCHEME_ALPHA_0 100 #define GFX_SCHEME_BACKGROUND_OFFSET_TOP_0 0 #define GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0 0 #define GFX_SCHEME_PRIMARY_COLOR_RED_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_SECONDARY_COLOR_RED_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_GREEN_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_BLUE_0 0x40 #define GFX_SCHEME_DISABLED_COLOR_RED_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_GREEN_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_BLUE_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_RED_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_GREEN_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_SIZE_0 3 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0 0xF8 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0 0xFC #define GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0 0xF8 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0 0x40 #define GFX_SCHEME_GRADIENT_START_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0 0x00 #define GFX_SCHEME_FILL_STYLE_0 GFX_FILL_STYLE_COLOR #define GFX_SCHEME_BACKGROUND_TYPE_0 GFX_BACKGROUND_NONE /*** GFX GOL Button Definitions ***/ #define GFX_STATICTEXT_LEFT_0 13 #define GFX_STATICTEXT_TOP_0 141 #define GFX_STATICTEXT_RIGHT_0 131 #define GFX_STATICTEXT_BOTTOM_0 191 #define GFX_STATICTEXT_STATE_0 GFX_GOL_STATICTEXT_DRAW_STATE #define GFX_STATICTEXT_TEXT_0 "0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0" #define GFX_STATICTEXT_ALIGNMENT_0 GFX_ALIGN_LEFT | GFX_ALIGN_TOP #define GFX_STATICTEXT_SCHEME_0 gfxScheme0 /*** static text IDs ***/ #define StaticText1 700 /*** GFX GOL windows Definitions ***/ #define GFX_PICTURE_LEFT_0 7 #define GFX_PICTURE_TOP_0 8 #define GFX_PICTURE_RIGHT_0 107 #define GFX_PICTURE_BOTTOM_0 137 #define GFX_PICTURE_STATE_0 GFX_GOL_PICTURECONTROL_DRAW_STATE #define GFX_PICTURE_SCALE_0 1 #define GFX_PICTURE_SCHEME_0 gfxScheme0 /*** Pictures IDs ***/ #define Picture1 800 /*** Line IDs ***/ #define Line11 950 #define Line10 951 #define Line9 952 #define Line8 953 #define Line7 954 #define Line6 955 #define Line5 956 #define Line4 957 #define Line3 958 #define Line2 959 #define Line1 960 /*** Rectangle IDs ***/ #define Rectangle5 1000 #define Rectangle4 1001 #define Rectangle1 1002 #define Rectangle3 1003 #define Rectangle2 1004 /*** Circle IDs ***/ #define Circle10 1050 #define Circle9 1051 #define Circle8 1052 #define Circle7 1053 #define Circle6 1054 #define Circle5 1055 #define Circle4 1056 #define Circle3 1057 #define Circle2 1058 #define Circle1 1059 /*** Screen IDs ***/ #define screen1 0 #define screen2 1 #define screen3 2 // ***************************************************************************** /* MPLAB Harmony Graphics Composer Objects Summary: Structure holding the graphics object handles Description: This structure contains the object handles for all graphics objects generated by the Harmony Graphics Composer Remarks: */ typedef struct HGC_OBJECTS { HGC_SCREEN_STATES screenState; // current state of screen state machine HGC_SCREEN_STATES prevRefreshState; // previous state of screen state machine // DRV_TOUCH_SAMPLE_POINTS samplePoints; /*** GOL Objects References ***/ GFX_GOL_STATICTEXT* pStaticText1Obj; GFX_GOL_PICTURECONTROL* pPicture1Obj; } HGC_OBJECTS; extern HGC_OBJECTS hgcObj; /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ); /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ); /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ); /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void); /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ); /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg); /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId); /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId); /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); #endif // _GFX_HGC_DEFINITIONS_H /******************************************************************************* End of File */ //以下、system_config.h //------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony System Configuration Header File Name: system_config.h Summary: Build-time configuration header for the system defined by this MPLAB Harmony project. Description: An MPLAB Project may have multiple configurations. This file defines the build-time options for a single configuration. Remarks: This configuration header must not define any prototypes or data definitions (or include any files that do). It only provides macro definitions for build-time configuration options that are not instantiated until used by another MPLAB Harmony module or application. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _SYSTEM_CONFIG_H #define _SYSTEM_CONFIG_H /* This is a temporary workaround for an issue with the peripheral library "Exists" functions that causes superfluous warnings. It "nulls" out the definition of The PLIB function attribute that causes the warning. Once that issue has been resolved, this definition should be removed. */ #define _PLIB_UNSUPPORTED // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** /* This section Includes other configuration headers necessary to completely define this configuration. */ // ***************************************************************************** // ***************************************************************************** // Section: System Service Configuration // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Common System Service Configuration Options */ #define SYS_VERSION_STR "1.05" #define SYS_VERSION 10500 // ***************************************************************************** /* Clock System Service Configuration Options */ #define SYS_CLK_FREQ 200000000ul #define SYS_CLK_BUS_PERIPHERAL_1 100000000ul #define SYS_CLK_BUS_PERIPHERAL_2 100000000ul #define SYS_CLK_BUS_PERIPHERAL_3 100000000ul #define SYS_CLK_BUS_PERIPHERAL_4 100000000ul #define SYS_CLK_BUS_PERIPHERAL_5 100000000ul #define SYS_CLK_BUS_PERIPHERAL_7 200000000ul #define SYS_CLK_BUS_PERIPHERAL_8 100000000ul #define SYS_CLK_CONFIG_PRIMARY_XTAL 24000000ul #define SYS_CLK_CONFIG_SECONDARY_XTAL 0ul /*** Ports System Service Configuration ***/ #define SYS_PORT_C_ANSEL 0xe01e #define SYS_PORT_C_TRIS 0xf01e #define SYS_PORT_C_LAT 0x0 #define SYS_PORT_C_ODC 0x0 #define SYS_PORT_C_CNPU 0x0 #define SYS_PORT_C_CNPD 0x0 #define SYS_PORT_C_CNEN 0x0 // ***************************************************************************** // ***************************************************************************** // Section: Driver Configuration // ***************************************************************************** // ***************************************************************************** #define GFX_USE_DISPLAY_CONTROLLER_INT035 //#define GFX_USE_DISPLAY_CONTROLLER_SSD1926 #define USE_16BIT_PMP //#define USE_8BIT_PMP // ***************************************************************************** // ***************************************************************************** // Section: Middleware & Other Library Configuration // ***************************************************************************** // ***************************************************************************** /*** GFX Library Configuration ***/ #define GFX_INSTANCES_NUMBER 1 #define GFX_SELF_PREEMPTION_LEVEL 0 #define GFX_CONFIG_COLOR_DEPTH 16 #define GFX_CONFIG_FONT_CHAR_SIZE 8 #define GFX_CONFIG_FONT_EXTERNAL_DISABLE #define GFX_CONFIG_FONT_RAM_DISABLE #define GFX_CONFIG_IMAGE_EXTERNAL_DISABLE #define GFX_CONFIG_IMAGE_RAM_DISABLE #define GFX_CONFIG_GRADIENT_DISABLE #define GFX_CONFIG_PALETTE_DISABLE #define GFX_CONFIG_FONT_ANTIALIASED_DISABLE #define GFX_CONFIG_TRANSPARENT_COLOR_DISABLE #define GFX_CONFIG_PALETTE_EXTERNAL_DISABLE #define GFX_CONFIG_DOUBLE_BUFFERING_DISABLE #define GFX_CONFIG_USE_KEYBOARD_DISABLE #define GFX_CONFIG_USE_TOUCHSCREEN_DISABLE #define GFX_CONFIG_FOCUS_DISABLE #define GFX_malloc(size) malloc(size) #define GFX_free(pObj) free(pObj) #endif // _SYSTEM_CONFIG_H /******************************************************************************* End of File */ //以下、system_definitions.h //----------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "driver/tmr/drv_tmr_static.h" #include "peripheral/int/plib_int.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "drv_gfx_INT035.h" //INT035用 //#include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */ //-----------------------------------------------------------------------------
<動作結果>
1. ピクチャー
表示モード | 液晶INT035の画面 |
画面@ | |
画面A | |
画面B |
2.. 動画 ----> YouTube
■ マイクロチップ デモソフト”Primitive” at PIC32MZ + INT043
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048EFH100
A 液晶: (株)ディスプレーテック INT043-TS WQVGA、3.5インチ
・ 開発環境 Harmony ver.1.06、 XC32 ver.1.40、 MPLABX 3.06 PIC32MZ2048EFH
revison 1
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //--------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" #include "1lcd_lib_C32.h" int delay_Clock = 200000000; //200MHz void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); // APP_TMR_DelayMS(5000); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); // APP_TMR_DelayMS(5000); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen1); // APP_TMR_DelayMS(5000); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_init.c //----------------------------------------------------------------------------- /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = OFF #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = OFF #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = OFF #pragma config IESO = OFF #pragma config POSCMOD = EC #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = OFF #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = OFF /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ //#pragma config FPLLICLK = PLL_FRC //内蔵高速発振器選択 //★★★ バグ有 主発振回路選択の時、FPLLICLK = PLL_POSCではなくFPLLICLK = PLL_FRCを選択する。(at ver.1.33 XC32) #pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ //#pragma config UPLLEN = ON /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** // </editor-fold> DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, /* .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, */ }; // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_INT043_Open, .drvInterfaceSet = DRV_GFX_INT043_InterfaceSet, // .drvOpen = DRV_GFX_INT035_Open, // .drvInterfaceSet = DRV_GFX_INT035_InterfaceSet, // .drvOpen = DRV_GFX_SSD1926_Open, // .drvInterfaceSet = DRV_GFX_SSD1926_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** void ys_PMP_Initialize(void) { short pClockPeriod = 1000000000 / 100000000; // PMP setup PMMODE = 0; PMAEN = 0; PMCON = 0; PMMODEbits.MODE = 2; // Intel 8080 master interface #if (PMP_DATA_SETUP_TIME == 0) PMMODEbits.WAITB = 0; #else if (PMP_DATA_SETUP_TIME <= pClockPeriod) PMMODEbits.WAITB = 0; else if (PMP_DATA_SETUP_TIME > pClockPeriod) PMMODEbits.WAITB = (PMP_DATA_SETUP_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_WAIT_TIME == 0) PMMODEbits.WAITM = 0; #else if (PMP_DATA_WAIT_TIME <= pClockPeriod) PMMODEbits.WAITM = 1; else if (PMP_DATA_WAIT_TIME > pClockPeriod) PMMODEbits.WAITM = (PMP_DATA_WAIT_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_HOLD_TIME == 0) PMMODEbits.WAITE = 0; #else if (PMP_DATA_HOLD_TIME <= pClockPeriod) PMMODEbits.WAITE = 0; else if (PMP_DATA_HOLD_TIME > pClockPeriod) PMMODEbits.WAITE = (PMP_DATA_HOLD_TIME / pClockPeriod) + 1; #endif #if defined(USE_16BIT_PMP) PMMODEbits.MODE16 = 1; // 16 bit mode #elif defined(USE_8BIT_PMP) PMMODEbits.MODE16 = 0; // 8 bit mode #endif PMCONbits.PTRDEN = 1; // enable RD line PMCONbits.PTWREN = 1; // enable WR line PMCONbits.PMPEN = 1; // enable PMP delay_us(200); } /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); SYS_PORTS_Initialize(); /* Initialize Drivers */ /* Initialize System Services */ delay_ms(500); //PMP 初期化 Initialize PMP0 ys_PMP_Initialize(); // DRV_PMP0_Initialize(); // DRV_PMP0_ModeConfig(); //GFX グラフィック初期化 DRV_GFX_INT043_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); // DRV_GFX_INT035_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); //DRV_GFX_SSD1926_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 267*1.5, // p1x 0, // p1y 53*1.5, // p2x 272-1); // p2y /* 267, // p1x 0, // p1y 53, // p2x 239); // p2y */ break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 214*1.5, // p1x 0, // p1y 106*1.5, // p2x 272-1); // p2y /* 214, // p1x 0, // p1y 106, // p2x 239); // p2y */ break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 106*1.5, // p1x 0, // p1y 214*1.5, // p2x 272-1); // p2y /* 106, // p1x 0, // p1y 214, // p2x 239); // p2y */ break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 53*1.5, // p1x 0, // p1y 267*1.5, // p2x 272-1); // p2y /* 53, // p1x 0, // p1y 267, // p2x 239); // p2y */ break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160*1.5, // p1x 0, // p1y 160*1.5, // p2x 272-1); // p2y /* 160, // p1x 0, // p1y 160, // p2x 239); // p2y */ break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 272-1, // p1y 319*1.5, // p2x 0); // p2y /* 0, // p1x 239, // p1y 319, // p2x 0); // p2y */ break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 480-1, // p2x 272-1); // p2y /* 0, // p1x 0, // p1y 319, // p2x 239); // p2y */ break; } case Line4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 480-1, // p1x 0, // p1y 480-1, // p2x 272-1); // p2y /* 319, // p1x 0, // p1y 319, // p2x 239); // p2y */ break; } case Line3: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 272-1); // p2y /* 0, // p1x 0, // p1y 0, // p2x 239); // p2y */ break; } case Line2: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 272-1, // p1y 480-1, // p2x 272-1); // p2y /* 0, // p1x 239, // p1y 319, // p2x 239); // p2y */ break; } case Line1: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 480-1, // p2x 0); // p2y /* 0, // p1x 0, // p1y 319, // p2x 0); // p2y */ break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 65+80, // p1x 30+16, // p1y 255+80, // p2x 210+16); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 80+80, // p1x 45+16, // p1y 240+80, // p2x 195+16); // p2y break; } case Rectangle1: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 125+80, // p1x 90+16, // p1y 195+80, // p2x 150+16); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 125+80, // p1x 90+16, // p1y 195+80, // p2x 150+16); // p2y break; } case Rectangle3: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 110+80, // p1x 75+16, // p1y 210+80, // p2x 165+16); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 110+80, // p1x 75+16, // p1y 210+80, // p2x 165+16); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 95+80, // p1x 60+16, // p1y 225+80, // p2x 180+16); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 95+80, // p1x 60+16, // p1y 225+80, // p2x 180+16); // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 55); // radius break; } case Circle5: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 68); // radius break; } case Circle4: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 81); // radius break; } case Circle3: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 94); // radius break; } case Circle2: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 107); // radius break; } case Circle1: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 480/2, //160, // p1x 272/2, //120, // p1y 120); // radius break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } //以下、system_definitions.h //----------------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "driver/tmr/drv_tmr_static.h" #include "peripheral/int/plib_int.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "drv_gfx_INT043.h" //INT035用 //#include "drv_gfx_INT035.h" //INT035用 //#include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */
<動作結果>
1. ピクチャー
表示モード | 液晶 INT043の画面 |
画面@ | |
画面A | |
画面B |
2.. 動画 ----> YouTube
■ マイクロチップ デモソフト”Primitive” at PIC32MZ + INT070
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048EFH100
A 液晶: (株)ディスプレーテック INT070A-TS WVGA、7.0インチ
・ 開発環境 Harmony ver.1.06、 XC32 ver.1.40、 MPLABX 3.06 PIC32MZ2048EFH
revison 1
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //------------------------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" #include "1lcd_lib_C32.h" int delay_Clock = 200000000; //200MHz void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_init.c //------------------------------------------------------------------------------------ /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = OFF #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = OFF #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = OFF #pragma config IESO = OFF #pragma config POSCMOD = EC #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = OFF #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = OFF /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ #pragma config FPLLICLK = PLL_FRC //内蔵高速発振器選択 //★★★ バグ有 主発振回路選択の時、FPLLICLK = PLL_POSCではなくFPLLICLK = PLL_FRCを選択する。(at ver.1.33 XC32) //#pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ //#pragma config UPLLEN = ON /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** // </editor-fold> DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, /* .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, */ }; // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_INT070_Open, .drvInterfaceSet = DRV_GFX_INT070_InterfaceSet, // .drvOpen = DRV_GFX_SSD1926_Open, // .drvInterfaceSet = DRV_GFX_SSD1926_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** void ys_PMP_Initialize(void) { short pClockPeriod = 1000000000 / 100000000; // PMP setup PMMODE = 0; PMAEN = 0; PMCON = 0; PMMODEbits.MODE = 2; // Intel 8080 master interface #if (PMP_DATA_SETUP_TIME == 0) PMMODEbits.WAITB = 0; #else if (PMP_DATA_SETUP_TIME <= pClockPeriod) PMMODEbits.WAITB = 0; else if (PMP_DATA_SETUP_TIME > pClockPeriod) PMMODEbits.WAITB = (PMP_DATA_SETUP_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_WAIT_TIME == 0) PMMODEbits.WAITM = 0; #else if (PMP_DATA_WAIT_TIME <= pClockPeriod) PMMODEbits.WAITM = 1; else if (PMP_DATA_WAIT_TIME > pClockPeriod) PMMODEbits.WAITM = (PMP_DATA_WAIT_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_HOLD_TIME == 0) PMMODEbits.WAITE = 0; #else if (PMP_DATA_HOLD_TIME <= pClockPeriod) PMMODEbits.WAITE = 0; else if (PMP_DATA_HOLD_TIME > pClockPeriod) PMMODEbits.WAITE = (PMP_DATA_HOLD_TIME / pClockPeriod) + 1; #endif #if defined(USE_16BIT_PMP) PMMODEbits.MODE16 = 1; // 16 bit mode #elif defined(USE_8BIT_PMP) PMMODEbits.MODE16 = 0; // 8 bit mode #endif PMCONbits.PTRDEN = 1; // enable RD line PMCONbits.PTWREN = 1; // enable WR line PMCONbits.PMPEN = 1; // enable PMP delay_us(200); } /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); SYS_PORTS_Initialize(); /* Initialize Drivers */ /* Initialize System Services */ delay_ms(500); //PMP 初期化 Initialize PMP0 ys_PMP_Initialize(); // DRV_PMP0_Initialize(); // DRV_PMP0_ModeConfig(); //GFX グラフィック初期化 DRV_GFX_INT070_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); //DRV_GFX_SSD1926_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、system_config.h //------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony System Configuration Header File Name: system_config.h Summary: Build-time configuration header for the system defined by this MPLAB Harmony project. Description: An MPLAB Project may have multiple configurations. This file defines the build-time options for a single configuration. Remarks: This configuration header must not define any prototypes or data definitions (or include any files that do). It only provides macro definitions for build-time configuration options that are not instantiated until used by another MPLAB Harmony module or application. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _SYSTEM_CONFIG_H #define _SYSTEM_CONFIG_H /* This is a temporary workaround for an issue with the peripheral library "Exists" functions that causes superfluous warnings. It "nulls" out the definition of The PLIB function attribute that causes the warning. Once that issue has been resolved, this definition should be removed. */ #define _PLIB_UNSUPPORTED // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** /* This section Includes other configuration headers necessary to completely define this configuration. */ // ***************************************************************************** // ***************************************************************************** // Section: System Service Configuration // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Common System Service Configuration Options */ #define SYS_VERSION_STR "1.05" #define SYS_VERSION 10500 // ***************************************************************************** /* Clock System Service Configuration Options */ #define SYS_CLK_FREQ 200000000ul #define SYS_CLK_BUS_PERIPHERAL_1 100000000ul #define SYS_CLK_BUS_PERIPHERAL_2 100000000ul #define SYS_CLK_BUS_PERIPHERAL_3 100000000ul #define SYS_CLK_BUS_PERIPHERAL_4 100000000ul #define SYS_CLK_BUS_PERIPHERAL_5 100000000ul #define SYS_CLK_BUS_PERIPHERAL_7 200000000ul #define SYS_CLK_BUS_PERIPHERAL_8 100000000ul #define SYS_CLK_CONFIG_PRIMARY_XTAL 24000000ul #define SYS_CLK_CONFIG_SECONDARY_XTAL 0ul /*** Ports System Service Configuration ***/ #define SYS_PORT_C_ANSEL 0xe01e #define SYS_PORT_C_TRIS 0xf01e #define SYS_PORT_C_LAT 0x0 #define SYS_PORT_C_ODC 0x0 #define SYS_PORT_C_CNPU 0x0 #define SYS_PORT_C_CNPD 0x0 #define SYS_PORT_C_CNEN 0x0 // ***************************************************************************** // ***************************************************************************** // Section: Driver Configuration // ***************************************************************************** // ***************************************************************************** #define GFX_USE_DISPLAY_CONTROLLER_INT035 //#define GFX_USE_DISPLAY_CONTROLLER_SSD1926 #define USE_16BIT_PMP //#define USE_8BIT_PMP // ***************************************************************************** // ***************************************************************************** // Section: Middleware & Other Library Configuration // ***************************************************************************** // ***************************************************************************** /*** GFX Library Configuration ***/ #define GFX_INSTANCES_NUMBER 1 #define GFX_SELF_PREEMPTION_LEVEL 0 #define GFX_CONFIG_COLOR_DEPTH 16 #define GFX_CONFIG_FONT_CHAR_SIZE 8 #define GFX_CONFIG_FONT_EXTERNAL_DISABLE #define GFX_CONFIG_FONT_RAM_DISABLE #define GFX_CONFIG_IMAGE_EXTERNAL_DISABLE #define GFX_CONFIG_IMAGE_RAM_DISABLE #define GFX_CONFIG_GRADIENT_DISABLE #define GFX_CONFIG_PALETTE_DISABLE #define GFX_CONFIG_FONT_ANTIALIASED_DISABLE #define GFX_CONFIG_TRANSPARENT_COLOR_DISABLE #define GFX_CONFIG_PALETTE_EXTERNAL_DISABLE #define GFX_CONFIG_DOUBLE_BUFFERING_DISABLE #define GFX_CONFIG_USE_KEYBOARD_DISABLE #define GFX_CONFIG_USE_TOUCHSCREEN_DISABLE #define GFX_CONFIG_FOCUS_DISABLE #define GFX_malloc(size) malloc(size) #define GFX_free(pObj) free(pObj) #endif // _SYSTEM_CONFIG_H /******************************************************************************* End of File */ //以下、system_definition.h //---------------------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "driver/tmr/drv_tmr_static.h" #include "peripheral/int/plib_int.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "drv_gfx_INT070.h" //INT070用 //#include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //----------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 267*800/320, // p1x 0, // p1y 53*800/320, // p2x 479); // p2y /* 267, // p1x 0, // p1y 53, // p2x 239); // p2y */ break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 214*800/320, // p1x 0, // p1y 106*800/320, // p2x 479); // p2y /* 214, // p1x 0, // p1y 106, // p2x 239); // p2y */ break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 106*800/320, // p1x 0, // p1y 214*800/320, // p2x 479); // p2y /* 106, // p1x 0, // p1y 214, // p2x 239); // p2y */ break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 53*800/320, // p1x 0, // p1y 267*800/320, // p2x 479); // p2y /* 53, // p1x 0, // p1y 267, // p2x 239); // p2y */ break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160*800/320, // p1x 0, // p1y 160*800/320, // p2x 479); // p2y /* 160, // p1x 0, // p1y 160, // p2x 239); // p2y */ break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 239*480/240, // p1y 319*800/320, // p2x 0); // p2y /* 0, // p1x 239, // p1y 319, // p2x 0); // p2y */ break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 799, // p2x 479); // p2y /* 0, // p1x 0, // p1y 319, // p2x 239); // p2y */ break; } case Line4: //黄緑 //右 { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 799, // p1x 0, // p1y 799, // p2x 479); // p2y /* 319, // p1x 0, // p1y 319, // p2x 239); // p2y */ break; } case Line3: //黄色 //左 { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 479); // p2y /* 0, // p1x 0, // p1y 0, // p2x 239); // p2y */ break; } case Line2: //青 //下 { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 479, // p1y 799, // p2x 479); // p2y /* 0, // p1x 239, // p1y 319, // p2x 239); // p2y */ break; } case Line1: //赤 //上 { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 799, // p2x 0); // p2y /* 0, // p1x 0, // p1y 319, // p2x 0); // p2y */ break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 65 + 240, // p1x //240 = 800/2 - 320/2 30 + 120, // p1y //120 = 480/2 - 240/2 255 + 240, // p2x 210 + 120); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 80 +240, // p1x 45 + 120, // p1y 240 +240, // p2x 195 + 120); // p2y break; } case Rectangle1: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 125 + 240, // p1x 90 + 120, // p1y 195 + 240, // p2x 150 + 120); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 125 + 240, // p1x 90 + 120, // p1y 195 + 240, // p2x 150 + 120); // p2y break; } case Rectangle3: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 110 + 240, // p1x 75 + 120, // p1y 210 + 240, // p2x 165 + 120); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 110 + 240, // p1x 75 + 120, // p1y 210 + 240, // p2x 165 + 120); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 95 + 240, // p1x 60 + 120, // p1y 225 + 240, // p2x 180 + 120); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 95 + 240, // p1x 60 + 120, // p1y 225 + 240, // p2x 180 + 120) ; // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 55); // radius break; } case Circle5: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 68); // radius break; } case Circle4: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 81); // radius break; } case Circle3: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 94); // radius break; } case Circle2: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 107); // radius break; } case Circle1: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 400, //160, // p1x 240, //120, // p1y 120); // radius break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } }
<動作結果>
1. ピクチャー
以下、各画面
各画面 | 液晶INT070の画面 |
画面@ | |
画面A | |
画面B |
2. 動画 -----> YouTube
■ マイクロチップ デモソフト”Primitive” at PIC32MZ + INT018
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048EFH100
A 液晶: (株)ディスプレーテック INT018 1/16 VGA(160 x128)、1.8インチ
・ 開発環境 Harmony ver.1.06、 XC32 ver.1.40、 MPLABX 3.06 PIC32MZ2048EFH
revison 1
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //-------------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //--------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" #include "1lcd_lib_C32.h" int delay_Clock = 200000000; //200MHz void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_init.c //----------------------------------------------------------------------- /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = OFF #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = OFF #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = OFF #pragma config IESO = OFF #pragma config POSCMOD = EC #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = OFF #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = OFF /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ //#pragma config FPLLICLK = PLL_FRC //内蔵高速発振器選択 //★★★ バグ有 主発振回路選択の時、FPLLICLK = PLL_POSCではなくFPLLICLK = PLL_FRCを選択する。(at ver.1.33 XC32) #pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ //#pragma config UPLLEN = ON /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** // </editor-fold> DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, /* .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, */ }; // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_INT018_Open, .drvInterfaceSet = DRV_GFX_INT018_InterfaceSet, // .drvOpen = DRV_GFX_SSD1926_Open, // .drvInterfaceSet = DRV_GFX_SSD1926_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** void ys_PMP_Initialize(void) { short pClockPeriod = 1000000000 / 100000000; // PMP setup PMMODE = 0; PMAEN = 0; PMCON = 0; PMMODEbits.MODE = 2; // Intel 8080 master interface #if (PMP_DATA_SETUP_TIME == 0) PMMODEbits.WAITB = 0; #else if (PMP_DATA_SETUP_TIME <= pClockPeriod) PMMODEbits.WAITB = 0; else if (PMP_DATA_SETUP_TIME > pClockPeriod) PMMODEbits.WAITB = (PMP_DATA_SETUP_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_WAIT_TIME == 0) PMMODEbits.WAITM = 0; #else if (PMP_DATA_WAIT_TIME <= pClockPeriod) PMMODEbits.WAITM = 1; else if (PMP_DATA_WAIT_TIME > pClockPeriod) PMMODEbits.WAITM = (PMP_DATA_WAIT_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_HOLD_TIME == 0) PMMODEbits.WAITE = 0; #else if (PMP_DATA_HOLD_TIME <= pClockPeriod) PMMODEbits.WAITE = 0; else if (PMP_DATA_HOLD_TIME > pClockPeriod) PMMODEbits.WAITE = (PMP_DATA_HOLD_TIME / pClockPeriod) + 1; #endif #if defined(USE_16BIT_PMP) PMMODEbits.MODE16 = 1; // 16 bit mode #elif defined(USE_8BIT_PMP) PMMODEbits.MODE16 = 0; // 8 bit mode #endif PMCONbits.PTRDEN = 1; // enable RD line PMCONbits.PTWREN = 1; // enable WR line PMCONbits.PMPEN = 1; // enable PMP delay_us(200); } /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); delay_ms(1000); //SYS_PORTS_Initialize(); ys_PMP_Initialize(); の前に設定のこと SYS_PORTS_Initialize(); /* SYS_DEVCON_SystemUnlock(); //PMP用ペリフェラルクロック低減 100MH → 25MHz PB2DIVbits.PBDIV = 0x03; //PBCLK2 is SYSCLK divided by 4 // PMP SPI 1/4 = 100MHz / 4 = 25MHz SYS_DEVCON_SystemLock(); */ /* Initialize Drivers */ /* Initialize System Services */ delay_ms(500); //PMP 初期化 Initialize PMP0 ys_PMP_Initialize(); // DRV_PMP0_Initialize(); // DRV_PMP0_ModeConfig(); //GFX グラフィック初期化 DRV_GFX_INT018_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); //DRV_GFX_SSD1926_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); //GFX初期化 /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、system_config.h //----------------------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony System Configuration Header File Name: system_config.h Summary: Build-time configuration header for the system defined by this MPLAB Harmony project. Description: An MPLAB Project may have multiple configurations. This file defines the build-time options for a single configuration. Remarks: This configuration header must not define any prototypes or data definitions (or include any files that do). It only provides macro definitions for build-time configuration options that are not instantiated until used by another MPLAB Harmony module or application. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _SYSTEM_CONFIG_H #define _SYSTEM_CONFIG_H /* This is a temporary workaround for an issue with the peripheral library "Exists" functions that causes superfluous warnings. It "nulls" out the definition of The PLIB function attribute that causes the warning. Once that issue has been resolved, this definition should be removed. */ #define _PLIB_UNSUPPORTED // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** /* This section Includes other configuration headers necessary to completely define this configuration. */ // ***************************************************************************** // ***************************************************************************** // Section: System Service Configuration // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Common System Service Configuration Options */ #define SYS_VERSION_STR "1.05" #define SYS_VERSION 10500 // ***************************************************************************** /* Clock System Service Configuration Options */ #define SYS_CLK_FREQ 200000000ul #define SYS_CLK_BUS_PERIPHERAL_1 100000000ul #define SYS_CLK_BUS_PERIPHERAL_2 100000000ul #define SYS_CLK_BUS_PERIPHERAL_3 100000000ul #define SYS_CLK_BUS_PERIPHERAL_4 100000000ul #define SYS_CLK_BUS_PERIPHERAL_5 100000000ul #define SYS_CLK_BUS_PERIPHERAL_7 200000000ul #define SYS_CLK_BUS_PERIPHERAL_8 100000000ul #define SYS_CLK_CONFIG_PRIMARY_XTAL 24000000ul #define SYS_CLK_CONFIG_SECONDARY_XTAL 0ul /*** Ports System Service Configuration ***/ #define SYS_PORT_C_ANSEL 0xe01e #define SYS_PORT_C_TRIS 0xf01e #define SYS_PORT_C_LAT 0x0 #define SYS_PORT_C_ODC 0x0 #define SYS_PORT_C_CNPU 0x0 #define SYS_PORT_C_CNPD 0x0 #define SYS_PORT_C_CNEN 0x0 // ***************************************************************************** // ***************************************************************************** // Section: Driver Configuration // ***************************************************************************** // ***************************************************************************** #define GFX_USE_DISPLAY_CONTROLLER_INT028 //#define GFX_USE_DISPLAY_CONTROLLER_SSD1926 //#define USE_16BIT_PMP #define USE_8BIT_PMP // ***************************************************************************** // ***************************************************************************** // Section: Middleware & Other Library Configuration // ***************************************************************************** // ***************************************************************************** /*** GFX Library Configuration ***/ #define GFX_INSTANCES_NUMBER 1 #define GFX_SELF_PREEMPTION_LEVEL 0 #define GFX_CONFIG_COLOR_DEPTH 16 #define GFX_CONFIG_FONT_CHAR_SIZE 8 #define GFX_CONFIG_FONT_EXTERNAL_DISABLE #define GFX_CONFIG_FONT_RAM_DISABLE #define GFX_CONFIG_IMAGE_EXTERNAL_DISABLE #define GFX_CONFIG_IMAGE_RAM_DISABLE #define GFX_CONFIG_GRADIENT_DISABLE #define GFX_CONFIG_PALETTE_DISABLE #define GFX_CONFIG_FONT_ANTIALIASED_DISABLE #define GFX_CONFIG_TRANSPARENT_COLOR_DISABLE #define GFX_CONFIG_PALETTE_EXTERNAL_DISABLE #define GFX_CONFIG_DOUBLE_BUFFERING_DISABLE #define GFX_CONFIG_USE_KEYBOARD_DISABLE #define GFX_CONFIG_USE_TOUCHSCREEN_DISABLE #define GFX_CONFIG_FOCUS_DISABLE #define GFX_malloc(size) malloc(size) #define GFX_free(pObj) free(pObj) #endif // _SYSTEM_CONFIG_H /******************************************************************************* End of File */ //以下、system_definition.h //---------------------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "driver/tmr/drv_tmr_static.h" #include "peripheral/int/plib_int.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "drv_gfx_INT018.h" //INT018用 //#include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //--------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160/6*5, //240/6*5, //267, // p1x 0, // p1y 160/6, //240/6, //53, // p2x 127); //319); //239); // p2y break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160/6*4, //240/6*4, //214, // p1x 0, // p1y 160/6*2, //240/6*2, //106, // p2x 127); //319); //239); // p2y break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160/6*2, //240/6*2, //106, // p1x 0, // p1y 160/6*4, //240/6*4, //214, // p2x 127); //319); //239); // p2y break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160/6, //240/6, //53, // p1x 0, // p1y 160/6*5, //240/6*5, //267, // p2x 127); //319); //239); // p2y break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 160/2, // 160, // p1x 0, // p1y 160/2, // 160, // p2x 127); // 239); // p2y break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 127, //319, //239, // p1y 159, //239, //319, // p2x 0); // p2y break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 159, //239, //319, // p2x 127); //319); //239); // p2y break; } case Line4: //LIGHT GREEN { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 159, //239, //319, // p1x 0, // p1y 159, //239, //319, // p2x 127); //319); //239); // p2y break; } case Line3: //YELLOW { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 127); //319); //239); // p2y break; } case Line2: //BLUE { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 127, //319, //239, // p1y 159, //239, //319, // p2x 127); //319); //239); // p2y break; } case Line1: //RED { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 159, //239, //319, // p2x 0); // p2y break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 160/2-60, //65-40, // p1x 128/2-60, //30+40, // p1y 160/2+60, //255-40, // p2x 128/2+60); //210+40); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 160/2-53, //80-40, // p1x 128/2-53, //45+40, // p1y 160/2+53, //240-40, // p2x 128/2+53); //195+40); // p2y break; } case Rectangle1: //RED SOLID { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 160/2-15, //125-40, // p1x 128/2-15, //90+40, // p1y 160/2+15, //195-40, // p2x 128/2+15); //150+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 160/2-15, //125-40, // p1x 128/2-15, //90+40, // p1y 160/2+15, //195-40, // p2x 128/2+15); //150+40); // p2y break; } case Rectangle3: //YELLOW GREEN SOLID { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 160/2-30, //110-40, // p1x 128/2-30, //75+40, // p1y 160/2+30, //210-40, // p2x 128/2+30); //165+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 160/2-30, //110-40, // p1x 128/2-30, //75+40, // p1y 160/2+30, //210-40, // p2x 128/2+30); //165+40); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 160/2-45, //95-40, // p1x 128/2-45, //60+40, // p1y 160/2+45, //225-40, // p2x 128/2+45); //180+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 160/2-45, //95-40, // p1x 128/2-45, //60+40, // p1y 160/2+45, //225-40, // p2x 128/2+45); //180+40); // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 80,//120, //160, // p1x 64, //160, //120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 80, //120, //160, // p1x 64, //160, //120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 80, //120, //160, // p1x 64, //160, //120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 80, //120, //160, // p1x 64, //160, //120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 80, //120, //160, // p1x 64, //160, //120, // p1y 55); // radius break; } case Circle5: { /* GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 68); // radius */ break; } case Circle4: { /* GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 81); // radius */ break; } case Circle3: { /* GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 94); // radius */ break; } case Circle2: { /* GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 107); // radius */ break; } case Circle1: { /* GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 120); // radius */ break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } }
<動作結果>
1. ピクチャー
以下、各画面
各液晶画面 | |
画面@ | |
画面A | |
画面B |
2. 動画 -----> YouTube
■ マイクロチップ デモソフト”Primitive” at PIC32MZ + INT022
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048EFH100
A 液晶: (株)ディスプレーテック INT022 QVGA(320 x240)、2.2インチ
・ 開発環境 Harmony ver.1.06、 XC32 ver.1.40、 MPLABX 3.15 PIC32MZ2048EFH
revison 1
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //------------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //------------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" #include "1lcd_lib_C32.h" int delay_Clock = 200000000; //200MHz void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_init.c //--------------------------------------------------------------------------------- /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = OFF #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = OFF #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = OFF #pragma config IESO = OFF #pragma config POSCMOD = EC #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = OFF #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = OFF /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ #pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ //#pragma config UPLLEN = ON /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** // </editor-fold> DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, /* .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, */ }; // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_INT028_Open, .drvInterfaceSet = DRV_GFX_INT028_InterfaceSet, // .drvOpen = DRV_GFX_SSD1926_Open, // .drvInterfaceSet = DRV_GFX_SSD1926_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** void ys_PMP_Initialize(void) { short pClockPeriod = 1000000000 / 100000000; // PMP setup PMMODE = 0; PMAEN = 0; PMCON = 0; PMMODEbits.MODE = 2; // Intel 8080 master interface #if (PMP_DATA_SETUP_TIME == 0) PMMODEbits.WAITB = 0; #else if (PMP_DATA_SETUP_TIME <= pClockPeriod) PMMODEbits.WAITB = 0; else if (PMP_DATA_SETUP_TIME > pClockPeriod) PMMODEbits.WAITB = (PMP_DATA_SETUP_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_WAIT_TIME == 0) PMMODEbits.WAITM = 0; #else if (PMP_DATA_WAIT_TIME <= pClockPeriod) PMMODEbits.WAITM = 1; else if (PMP_DATA_WAIT_TIME > pClockPeriod) PMMODEbits.WAITM = (PMP_DATA_WAIT_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_HOLD_TIME == 0) PMMODEbits.WAITE = 0; #else if (PMP_DATA_HOLD_TIME <= pClockPeriod) PMMODEbits.WAITE = 0; else if (PMP_DATA_HOLD_TIME > pClockPeriod) PMMODEbits.WAITE = (PMP_DATA_HOLD_TIME / pClockPeriod) + 1; #endif #if defined(USE_16BIT_PMP) PMMODEbits.MODE16 = 1; // 16 bit mode #elif defined(USE_8BIT_PMP) PMMODEbits.MODE16 = 0; // 8 bit mode #endif PMCONbits.PTRDEN = 1; // enable RD line PMCONbits.PTWREN = 1; // enable WR line PMCONbits.PMPEN = 1; // enable PMP delay_us(200); } /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); delay_ms(2000); //SYS_PORTS_Initialize(); ys_PMP_Initialize(); の前に設定のこと SYS_PORTS_Initialize(); /* SYS_DEVCON_SystemUnlock(); //PMP用ペリフェラルクロック低減 100MH → 25MHz // PB2DIVbits.PBDIV = 0b1111111; //1/128 PB2DIVbits.PBDIV = 0x03; //PBCLK2 is SYSCLK divided by 4 // PMP SPI 1/4 = 100MHz / 4 = 25MHz SYS_DEVCON_SystemLock(); */ /* Initialize Drivers */ /* Initialize System Services */ delay_ms(500); //PMP 初期化 Initialize PMP0 ys_PMP_Initialize(); // DRV_PMP0_Initialize(); // DRV_PMP0_ModeConfig(); //GFX グラフィック初期化 DRV_GFX_INT028_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); //DRV_GFX_SSD1926_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); //GFX初期化 /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、system_definitons.h //---------------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "driver/tmr/drv_tmr_static.h" #include "peripheral/int/plib_int.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "drv_gfx_INT028_24_22.h" //INT028, INT024, INT022用 //#include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.h //-------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Definitions Header File Name: gfx_hgc_definitions.h Summary: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Description: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _GFX_HGC_DEFINITIONS_H #define _GFX_HGC_DEFINITIONS_H #include "system_config.h" #include "system_definitions.h" typedef enum { HGC_STATE_INIT = 0, HGC_STATE_RUNNING } HGC_STATES; typedef enum { HGC_SCREEN_STATE_INIT = 0, HGC_SCREEN_STATE_SETUP_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1, HGC_SCREEN_STATE_SETUP_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2, HGC_SCREEN_STATE_SETUP_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3, } HGC_SCREEN_STATES; /*** GFX GOL Scheme Definitions ***/ #define GFX_SCHEME_NAME_0 "default" #define GFX_SCHEME_ALPHA_0 100 #define GFX_SCHEME_BACKGROUND_OFFSET_TOP_0 0 #define GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0 0 #define GFX_SCHEME_PRIMARY_COLOR_RED_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_SECONDARY_COLOR_RED_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_GREEN_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_BLUE_0 0x40 #define GFX_SCHEME_DISABLED_COLOR_RED_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_GREEN_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_BLUE_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_RED_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_GREEN_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_SIZE_0 3 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0 0xF8 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0 0xFC #define GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0 0xF8 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0 0x40 #define GFX_SCHEME_GRADIENT_START_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0 0x00 #define GFX_SCHEME_FILL_STYLE_0 GFX_FILL_STYLE_COLOR #define GFX_SCHEME_BACKGROUND_TYPE_0 GFX_BACKGROUND_NONE /*** GFX GOL Button Definitions ***/ #define GFX_STATICTEXT_LEFT_0 13 #define GFX_STATICTEXT_TOP_0 141 #define GFX_STATICTEXT_RIGHT_0 131 #define GFX_STATICTEXT_BOTTOM_0 191 #define GFX_STATICTEXT_STATE_0 GFX_GOL_STATICTEXT_DRAW_STATE #define GFX_STATICTEXT_TEXT_0 "0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0" #define GFX_STATICTEXT_ALIGNMENT_0 GFX_ALIGN_LEFT | GFX_ALIGN_TOP #define GFX_STATICTEXT_SCHEME_0 gfxScheme0 /*** static text IDs ***/ #define StaticText1 700 /*** GFX GOL windows Definitions ***/ #define GFX_PICTURE_LEFT_0 7 #define GFX_PICTURE_TOP_0 8 #define GFX_PICTURE_RIGHT_0 107 #define GFX_PICTURE_BOTTOM_0 137 #define GFX_PICTURE_STATE_0 GFX_GOL_PICTURECONTROL_DRAW_STATE #define GFX_PICTURE_SCALE_0 1 #define GFX_PICTURE_SCHEME_0 gfxScheme0 /*** Pictures IDs ***/ #define Picture1 800 /*** Line IDs ***/ #define Line11 950 #define Line10 951 #define Line9 952 #define Line8 953 #define Line7 954 #define Line6 955 #define Line5 956 #define Line4 957 #define Line3 958 #define Line2 959 #define Line1 960 /*** Rectangle IDs ***/ #define Rectangle5 1000 #define Rectangle4 1001 #define Rectangle1 1002 #define Rectangle3 1003 #define Rectangle2 1004 /*** Circle IDs ***/ #define Circle10 1050 #define Circle9 1051 #define Circle8 1052 #define Circle7 1053 #define Circle6 1054 #define Circle5 1055 #define Circle4 1056 #define Circle3 1057 #define Circle2 1058 #define Circle1 1059 /*** Screen IDs ***/ #define screen1 0 #define screen2 1 #define screen3 2 // ***************************************************************************** /* MPLAB Harmony Graphics Composer Objects Summary: Structure holding the graphics object handles Description: This structure contains the object handles for all graphics objects generated by the Harmony Graphics Composer Remarks: */ typedef struct HGC_OBJECTS { HGC_SCREEN_STATES screenState; // current state of screen state machine HGC_SCREEN_STATES prevRefreshState; // previous state of screen state machine // DRV_TOUCH_SAMPLE_POINTS samplePoints; /*** GOL Objects References ***/ GFX_GOL_STATICTEXT* pStaticText1Obj; GFX_GOL_PICTURECONTROL* pPicture1Obj; } HGC_OBJECTS; extern HGC_OBJECTS hgcObj; /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ); /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ); /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ); /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void); /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ); /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg); /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId); /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId); /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); #endif // _GFX_HGC_DEFINITIONS_H /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*5, //267, // p1x 0, // p1y 240/6, //53, // p2x 319); //239); // p2y break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*4, //214, // p1x 0, // p1y 240/6*2, //106, // p2x 319); //239); // p2y break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*2, //106, // p1x 0, // p1y 240/6*4, //214, // p2x 319); //239); // p2y break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6, //53, // p1x 0, // p1y 240/6*5, //267, // p2x 319); //239); // p2y break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 120, // 160, // p1x 0, // p1y 120, // 160, // p2x 319); // 239); // p2y break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 319, //239, // p1y 239, //319, // p2x 0); // p2y break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line4: //LIGHT GREEN { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 239, //319, // p1x 0, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line3: //YELLOW { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 319); //239); // p2y break; } case Line2: //BLUE { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 319, //239, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line1: //RED { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 239, //319, // p2x 0); // p2y break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 65-40, // p1x 30+40, // p1y 255-40, // p2x 210+40); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 80-40, // p1x 45+40, // p1y 240-40, // p2x 195+40); // p2y break; } case Rectangle1: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 125-40, // p1x 90+40, // p1y 195-40, // p2x 150+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 125-40, // p1x 90+40, // p1y 195-40, // p2x 150+40); // p2y break; } case Rectangle3: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 110-40, // p1x 75+40, // p1y 210-40, // p2x 165+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 110-40, // p1x 75+40, // p1y 210-40, // p2x 165+40); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 95-40, // p1x 60+40, // p1y 225-40, // p2x 180+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 95-40, // p1x 60+40, // p1y 225-40, // p2x 180+40); // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 55); // radius break; } case Circle5: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 68); // radius break; } case Circle4: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 81); // radius break; } case Circle3: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 94); // radius break; } case Circle2: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 107); // radius break; } case Circle1: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 120); // radius break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } }
<動作結果>
1. ピクチャー
液晶画面モード | 液晶INT022の画面 |
画面@ | |
画面A | |
画面B |
2.. 動画 ----> YouTube
■ マイクロチップ デモソフト”Primitive” at PIC32MZ + INT024
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048EFH100
A 液晶: (株)ディスプレーテック INT024 QVGA(320 x240)、2.4インチ
・ 開発環境 Harmony ver.1.06、 XC32 ver.1.40、 MPLABX 3.15 PIC32MZ2048EFH
revison 1
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //------------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //------------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" #include "1lcd_lib_C32.h" int delay_Clock = 200000000; //200MHz void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_init.c //--------------------------------------------------------------------------------- /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = OFF #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = OFF #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = OFF #pragma config IESO = OFF #pragma config POSCMOD = EC #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = OFF #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = OFF /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ #pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ //#pragma config UPLLEN = ON /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** // </editor-fold> DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, /* .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, */ }; // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_INT028_Open, .drvInterfaceSet = DRV_GFX_INT028_InterfaceSet, // .drvOpen = DRV_GFX_SSD1926_Open, // .drvInterfaceSet = DRV_GFX_SSD1926_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** void ys_PMP_Initialize(void) { short pClockPeriod = 1000000000 / 100000000; // PMP setup PMMODE = 0; PMAEN = 0; PMCON = 0; PMMODEbits.MODE = 2; // Intel 8080 master interface #if (PMP_DATA_SETUP_TIME == 0) PMMODEbits.WAITB = 0; #else if (PMP_DATA_SETUP_TIME <= pClockPeriod) PMMODEbits.WAITB = 0; else if (PMP_DATA_SETUP_TIME > pClockPeriod) PMMODEbits.WAITB = (PMP_DATA_SETUP_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_WAIT_TIME == 0) PMMODEbits.WAITM = 0; #else if (PMP_DATA_WAIT_TIME <= pClockPeriod) PMMODEbits.WAITM = 1; else if (PMP_DATA_WAIT_TIME > pClockPeriod) PMMODEbits.WAITM = (PMP_DATA_WAIT_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_HOLD_TIME == 0) PMMODEbits.WAITE = 0; #else if (PMP_DATA_HOLD_TIME <= pClockPeriod) PMMODEbits.WAITE = 0; else if (PMP_DATA_HOLD_TIME > pClockPeriod) PMMODEbits.WAITE = (PMP_DATA_HOLD_TIME / pClockPeriod) + 1; #endif #if defined(USE_16BIT_PMP) PMMODEbits.MODE16 = 1; // 16 bit mode #elif defined(USE_8BIT_PMP) PMMODEbits.MODE16 = 0; // 8 bit mode #endif PMCONbits.PTRDEN = 1; // enable RD line PMCONbits.PTWREN = 1; // enable WR line PMCONbits.PMPEN = 1; // enable PMP delay_us(200); } /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); delay_ms(2000); //SYS_PORTS_Initialize(); ys_PMP_Initialize(); の前に設定のこと SYS_PORTS_Initialize(); /* SYS_DEVCON_SystemUnlock(); //PMP用ペリフェラルクロック低減 100MH → 25MHz // PB2DIVbits.PBDIV = 0b1111111; //1/128 PB2DIVbits.PBDIV = 0x03; //PBCLK2 is SYSCLK divided by 4 // PMP SPI 1/4 = 100MHz / 4 = 25MHz SYS_DEVCON_SystemLock(); */ /* Initialize Drivers */ /* Initialize System Services */ delay_ms(500); //PMP 初期化 Initialize PMP0 ys_PMP_Initialize(); // DRV_PMP0_Initialize(); // DRV_PMP0_ModeConfig(); //GFX グラフィック初期化 DRV_GFX_INT028_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); //DRV_GFX_SSD1926_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); //GFX初期化 /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、system_definitons.h //---------------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "driver/tmr/drv_tmr_static.h" #include "peripheral/int/plib_int.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "drv_gfx_INT028_24_22.h" //INT028, INT024, INT022用 //#include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.h //-------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Definitions Header File Name: gfx_hgc_definitions.h Summary: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Description: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _GFX_HGC_DEFINITIONS_H #define _GFX_HGC_DEFINITIONS_H #include "system_config.h" #include "system_definitions.h" typedef enum { HGC_STATE_INIT = 0, HGC_STATE_RUNNING } HGC_STATES; typedef enum { HGC_SCREEN_STATE_INIT = 0, HGC_SCREEN_STATE_SETUP_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1, HGC_SCREEN_STATE_SETUP_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2, HGC_SCREEN_STATE_SETUP_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3, } HGC_SCREEN_STATES; /*** GFX GOL Scheme Definitions ***/ #define GFX_SCHEME_NAME_0 "default" #define GFX_SCHEME_ALPHA_0 100 #define GFX_SCHEME_BACKGROUND_OFFSET_TOP_0 0 #define GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0 0 #define GFX_SCHEME_PRIMARY_COLOR_RED_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_SECONDARY_COLOR_RED_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_GREEN_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_BLUE_0 0x40 #define GFX_SCHEME_DISABLED_COLOR_RED_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_GREEN_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_BLUE_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_RED_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_GREEN_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_SIZE_0 3 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0 0xF8 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0 0xFC #define GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0 0xF8 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0 0x40 #define GFX_SCHEME_GRADIENT_START_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0 0x00 #define GFX_SCHEME_FILL_STYLE_0 GFX_FILL_STYLE_COLOR #define GFX_SCHEME_BACKGROUND_TYPE_0 GFX_BACKGROUND_NONE /*** GFX GOL Button Definitions ***/ #define GFX_STATICTEXT_LEFT_0 13 #define GFX_STATICTEXT_TOP_0 141 #define GFX_STATICTEXT_RIGHT_0 131 #define GFX_STATICTEXT_BOTTOM_0 191 #define GFX_STATICTEXT_STATE_0 GFX_GOL_STATICTEXT_DRAW_STATE #define GFX_STATICTEXT_TEXT_0 "0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0" #define GFX_STATICTEXT_ALIGNMENT_0 GFX_ALIGN_LEFT | GFX_ALIGN_TOP #define GFX_STATICTEXT_SCHEME_0 gfxScheme0 /*** static text IDs ***/ #define StaticText1 700 /*** GFX GOL windows Definitions ***/ #define GFX_PICTURE_LEFT_0 7 #define GFX_PICTURE_TOP_0 8 #define GFX_PICTURE_RIGHT_0 107 #define GFX_PICTURE_BOTTOM_0 137 #define GFX_PICTURE_STATE_0 GFX_GOL_PICTURECONTROL_DRAW_STATE #define GFX_PICTURE_SCALE_0 1 #define GFX_PICTURE_SCHEME_0 gfxScheme0 /*** Pictures IDs ***/ #define Picture1 800 /*** Line IDs ***/ #define Line11 950 #define Line10 951 #define Line9 952 #define Line8 953 #define Line7 954 #define Line6 955 #define Line5 956 #define Line4 957 #define Line3 958 #define Line2 959 #define Line1 960 /*** Rectangle IDs ***/ #define Rectangle5 1000 #define Rectangle4 1001 #define Rectangle1 1002 #define Rectangle3 1003 #define Rectangle2 1004 /*** Circle IDs ***/ #define Circle10 1050 #define Circle9 1051 #define Circle8 1052 #define Circle7 1053 #define Circle6 1054 #define Circle5 1055 #define Circle4 1056 #define Circle3 1057 #define Circle2 1058 #define Circle1 1059 /*** Screen IDs ***/ #define screen1 0 #define screen2 1 #define screen3 2 // ***************************************************************************** /* MPLAB Harmony Graphics Composer Objects Summary: Structure holding the graphics object handles Description: This structure contains the object handles for all graphics objects generated by the Harmony Graphics Composer Remarks: */ typedef struct HGC_OBJECTS { HGC_SCREEN_STATES screenState; // current state of screen state machine HGC_SCREEN_STATES prevRefreshState; // previous state of screen state machine // DRV_TOUCH_SAMPLE_POINTS samplePoints; /*** GOL Objects References ***/ GFX_GOL_STATICTEXT* pStaticText1Obj; GFX_GOL_PICTURECONTROL* pPicture1Obj; } HGC_OBJECTS; extern HGC_OBJECTS hgcObj; /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ); /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ); /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ); /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void); /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ); /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg); /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId); /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId); /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); #endif // _GFX_HGC_DEFINITIONS_H /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*5, //267, // p1x 0, // p1y 240/6, //53, // p2x 319); //239); // p2y break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*4, //214, // p1x 0, // p1y 240/6*2, //106, // p2x 319); //239); // p2y break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*2, //106, // p1x 0, // p1y 240/6*4, //214, // p2x 319); //239); // p2y break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6, //53, // p1x 0, // p1y 240/6*5, //267, // p2x 319); //239); // p2y break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 120, // 160, // p1x 0, // p1y 120, // 160, // p2x 319); // 239); // p2y break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 319, //239, // p1y 239, //319, // p2x 0); // p2y break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line4: //LIGHT GREEN { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 239, //319, // p1x 0, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line3: //YELLOW { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 319); //239); // p2y break; } case Line2: //BLUE { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 319, //239, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line1: //RED { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 239, //319, // p2x 0); // p2y break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 65-40, // p1x 30+40, // p1y 255-40, // p2x 210+40); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 80-40, // p1x 45+40, // p1y 240-40, // p2x 195+40); // p2y break; } case Rectangle1: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 125-40, // p1x 90+40, // p1y 195-40, // p2x 150+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 125-40, // p1x 90+40, // p1y 195-40, // p2x 150+40); // p2y break; } case Rectangle3: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 110-40, // p1x 75+40, // p1y 210-40, // p2x 165+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 110-40, // p1x 75+40, // p1y 210-40, // p2x 165+40); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 95-40, // p1x 60+40, // p1y 225-40, // p2x 180+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 95-40, // p1x 60+40, // p1y 225-40, // p2x 180+40); // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 55); // radius break; } case Circle5: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 68); // radius break; } case Circle4: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 81); // radius break; } case Circle3: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 94); // radius break; } case Circle2: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 107); // radius break; } case Circle1: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 120); // radius break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } }
<動作結果>
1. ピクチャー
以下、各画面
グラフィック液晶画面 | |
@ | |
A | |
B |
2. 動画 ---> YouTube
■ マイクロチップ デモソフト”Primitive” at PIC32MZ + INT028
<試作品仕様>
・ Harmonyのグラフィックライブラリのサンプルデモソフトとして マイクロチップから提供されている
”Primitive"(C:\microchip\harmony\v1_05\apps\gfx\primitive)を
下記ハードウェアで実行する
@ PIC: PIC32MZ2048EFH100
A 液晶: (株)ディスプレーテック INT028 QVGA(320 x240)、2.8インチ
・ 開発環境 Harmony ver.1.06、 XC32 ver.1.40、 MPLABX 3.15 PIC32MZ2048EFH
revison 1
<試作品回路図>(→回路図のPDFファイル)
<試作品外観>下記の写真には上記回路図にはない、また本テーマと関係のない部品が多々写っています
<プログラム例> //以下、main.c //------------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Project Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for an MPLAB Harmony project. Description: This file contains the "main" function for an MPLAB Harmony project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all MPLAB Harmony modules in the system and it calls the "SYS_Tasks" function from within a system-wide "super" loop to maintain their correct operation. These two functions are implemented in configuration-specific files (usually "system_init.c" and "system_tasks.c") in a configuration-specific folder under the "src/system_config" folder within this project's top-level folder. An MPLAB Harmony project may have more than one configuration, each contained within it's own folder under the "system_config" folder. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. //Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "system/common/sys_module.h" // SYS function prototypes // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all MPLAB Harmony modules, including application(s). */ SYS_Initialize ( NULL ); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */ //以下、app.c //------------------------------------------------------------------------------------------ /******************************************************************************* MPLAB Harmony Application Source File Company: Microchip Technology Inc. File Name: app.c Summary: This file contains the source code for the MPLAB Harmony application. Description: This file contains the source code for the MPLAB Harmony application. It implements the logic of the application's state machine and it may call API routines of other MPLAB Harmony modules in the system, such as drivers, system services, and middleware. However, it does not call any of the system interfaces (such as the "Initialize" and "Tasks" functions) of any of the modules in the system or make any assumptions about when those functions are called. That is the responsibility of the configuration-specific system files. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "app.h" #include "1lcd_lib_C32.h" int delay_Clock = 200000000; //200MHz void delay_us(volatile unsigned int usec) //1μsec遅延 { volatile int count; count = (int)(delay_Clock/20000000)*usec; do //実測 at 200MH (Clock=200000000) { //delay_us(1000):1000.4μsec delay_us(100):100.6μsec delay_us(10):10.5μsec delay_us(1):1.5μsec asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); count--; }while(count != 0); } void delay_ms(volatile unsigned int msec) //1msec遅延 { volatile unsigned int i; //実測:at200MH (Clock=200000000)//delay_ms(1): 1.0006msec delay_ms(100):100.04msec for(i=0; i<msec; i++) delay_us(1000); } // ***************************************************************************** // ***************************************************************************** // Section: Global Data Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* Application Data Summary: Holds application data Description: This structure holds the application's data. Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure. */ APP_DATA appData; // ***************************************************************************** // ***************************************************************************** // Section: MACROS // ***************************************************************************** // ***************************************************************************** #define MIN(x,y) ((x > y)? y: x) #define APP_SCREEN_DELAY_MS (1000) // ***************************************************************************** // ***************************************************************************** // Section: Global Variable Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Application Local Routines // ***************************************************************************** void APP_TMR_DelayMS ( unsigned int delayMs ); // ***************************************************************************** // ***************************************************************************** // Section: Application Callback Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary callback funtions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Local Functions // ***************************************************************************** // ***************************************************************************** /* TODO: Add any necessary local functions. */ // ***************************************************************************** // ***************************************************************************** // Section: Application Initialization and State Machine Functions // ***************************************************************************** // ***************************************************************************** /******************************************************************************* Function: void APP_Initialize ( void ) Remarks: See prototype in app.h. */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; /* TODO: Initialize your application's state machine and other * parameters. */ } /****************************************************************************** Function: void APP_Tasks ( void ) Remarks: See prototype in app.h. */ void APP_Tasks ( void ) { /* Check the application's current state. */ switch ( appData.state ) { /* Application's initial state. */ case APP_STATE_INIT: { appData.state = APP_HGC_SCREEN1_DRAW; break; } case APP_HGC_SCREEN1_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1) return; GFX_HGC_ChangeScreen(screen2); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN2_DRAW; break; } case APP_HGC_SCREEN2_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2) return; GFX_HGC_ChangeScreen(screen3); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN3_DRAW; break; } case APP_HGC_SCREEN3_DRAW: { if(hgcObj.screenState != HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3) return; GFX_HGC_ChangeScreen(screen1); APP_TMR_DelayMS(1000); appData.state = APP_HGC_SCREEN1_DRAW; break; } /* The default state should never be executed. */ default: { /* TODO: Handle error in application's state machine. */ break; } } } void APP_TMR_DelayMS ( unsigned int delayMs ) { if(delayMs) { uint32_t sysClk = SYS_CLK_FREQ; uint32_t t0; t0 = _CP0_GET_COUNT(); while (_CP0_GET_COUNT() - t0 < (sysClk/2000)*delayMs); } } /******************************************************************************* End of File */ //以下、system_init.c //--------------------------------------------------------------------------------- /******************************************************************************* System Initialization File File Name: system_init.c Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, defines the configuration bits, and allocates any necessary global system resources, such as the sysObj structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include "system_config.h" #include "system_definitions.h" // **************************************************************************** // **************************************************************************** // Section: Configuration Bits // **************************************************************************** // **************************************************************************** // <editor-fold defaultstate="collapsed" desc="Configuration Bits"> /*** DEVCFG0 ***/ #pragma config DEBUG = OFF #pragma config JTAGEN = OFF #pragma config ICESEL = ICS_PGx1 #pragma config TRCEN = OFF #pragma config BOOTISA = MIPS32 #pragma config FECCCON = OFF_UNLOCKED #pragma config FSLEEP = OFF #pragma config DBGPER = PG_ALL #pragma config EJTAGBEN = NORMAL #pragma config CP = OFF /*** DEVCFG1 ***/ #pragma config FNOSC = SPLL #pragma config DMTINTV = WIN_127_128 #pragma config FSOSCEN = OFF #pragma config IESO = OFF #pragma config POSCMOD = EC #pragma config OSCIOFNC = OFF #pragma config FCKSM = CSECME #pragma config WDTPS = PS1048576 #pragma config WDTSPGM = STOP #pragma config FWDTEN = OFF #pragma config WINDIS = NORMAL #pragma config FWDTWINSZ = WINSZ_25 #pragma config DMTCNT = DMT31 #pragma config FDMTEN = OFF /*** DEVCFG2 ***/ #pragma config FPLLIDIV = DIV_3 #pragma config FPLLRNG = RANGE_5_10_MHZ #pragma config FPLLICLK = PLL_POSC #pragma config FPLLMULT = MUL_50 #pragma config FPLLODIV = DIV_2 #pragma config UPLLFSEL = FREQ_24MHZ //#pragma config UPLLEN = ON /*** DEVCFG3 ***/ #pragma config USERID = 0xffff #pragma config FMIIEN = ON #pragma config FETHIO = ON #pragma config PGL1WAY = ON #pragma config PMDL1WAY = ON #pragma config IOL1WAY = ON #pragma config FUSBIDIO = ON /*** BF1SEQ0 ***/ #pragma config TSEQ = 0xffff #pragma config CSEQ = 0xffff // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Library/Stack Initialization Data // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: Driver Initialization Data // ***************************************************************************** // ***************************************************************************** // </editor-fold> DRV_GFX_INIT drvGfxInit = { .orientation = DISP_ORIENTATION, .horizontalResolution = DISP_HOR_RESOLUTION, .verticalResolution = DISP_VER_RESOLUTION, /* .dataWidth = DISP_DATA_WIDTH, .horizontalPulseWidth = DISP_HOR_PULSE_WIDTH, .horizontalBackPorch = DISP_HOR_BACK_PORCH, .horizontalFrontPorch = DISP_HOR_FRONT_PORCH, .verticalPulseWidth = DISP_VER_PULSE_WIDTH, .verticalBackPorch = DISP_VER_BACK_PORCH, .verticalFrontPorch = DISP_VER_FRONT_PORCH, .logicShift = DISP_INV_LSHIFT, .LCDType = 1, .colorType = 0, .TCON_Init = TCON_MODULE, */ }; // ***************************************************************************** // ***************************************************************************** // Section: System Data // ***************************************************************************** // ***************************************************************************** /* Structure to hold the object handles for the modules in the system. */ SYSTEM_OBJECTS sysObj; // ***************************************************************************** // ***************************************************************************** // Section: Module Initialization Data // ***************************************************************************** // ***************************************************************************** /*** GFX Initialization Data ***/ const GFX_INIT gfxInit0 = { .drvInitialize = NULL, .drvOpen = DRV_GFX_INT028_Open, .drvInterfaceSet = DRV_GFX_INT028_InterfaceSet, // .drvOpen = DRV_GFX_SSD1926_Open, // .drvInterfaceSet = DRV_GFX_SSD1926_InterfaceSet, }; /******************************************************************************* Device Control System Service Initialization Data <editor-fold defaultstate="collapsed" desc="Device Control System Service Initialization Data"> */ const SYS_DEVCON_INIT sysDevconInit = { .moduleInit = {0}, }; // </editor-fold> // ***************************************************************************** // ***************************************************************************** // Section: Static Initialization Functions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** // Section: System Initialization // ***************************************************************************** // ***************************************************************************** void ys_PMP_Initialize(void) { short pClockPeriod = 1000000000 / 100000000; // PMP setup PMMODE = 0; PMAEN = 0; PMCON = 0; PMMODEbits.MODE = 2; // Intel 8080 master interface #if (PMP_DATA_SETUP_TIME == 0) PMMODEbits.WAITB = 0; #else if (PMP_DATA_SETUP_TIME <= pClockPeriod) PMMODEbits.WAITB = 0; else if (PMP_DATA_SETUP_TIME > pClockPeriod) PMMODEbits.WAITB = (PMP_DATA_SETUP_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_WAIT_TIME == 0) PMMODEbits.WAITM = 0; #else if (PMP_DATA_WAIT_TIME <= pClockPeriod) PMMODEbits.WAITM = 1; else if (PMP_DATA_WAIT_TIME > pClockPeriod) PMMODEbits.WAITM = (PMP_DATA_WAIT_TIME / pClockPeriod) + 1; #endif #if (PMP_DATA_HOLD_TIME == 0) PMMODEbits.WAITE = 0; #else if (PMP_DATA_HOLD_TIME <= pClockPeriod) PMMODEbits.WAITE = 0; else if (PMP_DATA_HOLD_TIME > pClockPeriod) PMMODEbits.WAITE = (PMP_DATA_HOLD_TIME / pClockPeriod) + 1; #endif #if defined(USE_16BIT_PMP) PMMODEbits.MODE16 = 1; // 16 bit mode #elif defined(USE_8BIT_PMP) PMMODEbits.MODE16 = 0; // 8 bit mode #endif PMCONbits.PTRDEN = 1; // enable RD line PMCONbits.PTWREN = 1; // enable WR line PMCONbits.PMPEN = 1; // enable PMP delay_us(200); } /******************************************************************************* Function: void SYS_Initialize ( SYS_INIT_DATA *data ) Summary: Initializes the board, services, drivers, application and other modules. Remarks: See prototype in system/common/sys_module.h. */ void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); delay_ms(2000); //SYS_PORTS_Initialize(); ys_PMP_Initialize(); の前に設定のこと SYS_PORTS_Initialize(); /* SYS_DEVCON_SystemUnlock(); //PMP用ペリフェラルクロック低減 100MH → 25MHz // PB2DIVbits.PBDIV = 0b1111111; //1/128 PB2DIVbits.PBDIV = 0x03; //PBCLK2 is SYSCLK divided by 4 // PMP SPI 1/4 = 100MHz / 4 = 25MHz SYS_DEVCON_SystemLock(); */ /* Initialize Drivers */ /* Initialize System Services */ delay_ms(500); //PMP 初期化 Initialize PMP0 ys_PMP_Initialize(); // DRV_PMP0_Initialize(); // DRV_PMP0_ModeConfig(); //GFX グラフィック初期化 DRV_GFX_INT028_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); //DRV_GFX_SSD1926_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT*)&drvGfxInit); /* Initialize Middleware */ sysObj.gfxObject0 = GFX_Initialize(GFX_INDEX_0, (SYS_MODULE_INIT *)&gfxInit0); //GFX初期化 /* Initialize the Application */ APP_Initialize(); } /******************************************************************************* End of File */ //以下、system_definitons.h //---------------------------------------------------------------------------------- /******************************************************************************* System Definitions File Name: system_definitions.h Summary: MPLAB Harmony project system definitions. Description: This file contains the system-wide prototypes and definitions for an MPLAB Harmony project. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ //DOM-IGNORE-END #ifndef _SYS_DEFINITIONS_H #define _SYS_DEFINITIONS_H // ***************************************************************************** // ***************************************************************************** // Section: Included Files // ***************************************************************************** // ***************************************************************************** #include <stdint.h> #include <stddef.h> #include <stdbool.h> #include "system/common/sys_common.h" #include "system/common/sys_module.h" #include "system/clk/sys_clk.h" #include "system/clk/sys_clk_static.h" #include "system/devcon/sys_devcon.h" #include "system/console/sys_console.h" #include "framework/driver/pmp/drv_pmp_static.h" #include "driver/tmr/drv_tmr_static.h" #include "peripheral/int/plib_int.h" #include "system/ports/sys_ports.h" #include "gfx/gfx.h" #include "gfx/gfx_gol.h" #include "gfx/gfx_gol_scheme.h" #include "drv_gfx_INT028_24_22.h" //INT028, INT024, INT022用 //#include "driver/gfx/controller/ssd1926/drv_gfx_ssd1926.h" #include "system/debug/sys_debug.h" #include "system/command/sys_command.h" #include "gfx_hgc_definitions.h" #include "app.h" // ***************************************************************************** // ***************************************************************************** // Section: Type Definitions // ***************************************************************************** // ***************************************************************************** // ***************************************************************************** /* System Objects Summary: Structure holding the system's object handles Description: This structure contains the object handles for all objects in the MPLAB Harmony project's system configuration. Remarks: These handles are returned from the "Initialize" functions for each module and must be passed into the "Tasks" function for each module. */ typedef struct { SYS_MODULE_OBJ sysDevcon; SYS_MODULE_OBJ gfxObject0; } SYSTEM_OBJECTS; // ***************************************************************************** // ***************************************************************************** // Section: extern declarations // ***************************************************************************** // ***************************************************************************** extern SYSTEM_OBJECTS sysObj; #endif /* _SYS_DEFINITIONS_H */ /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.h //-------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Definitions Header File Name: gfx_hgc_definitions.h Summary: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Description: Build-time generated definitions header based on output by the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #ifndef _GFX_HGC_DEFINITIONS_H #define _GFX_HGC_DEFINITIONS_H #include "system_config.h" #include "system_definitions.h" typedef enum { HGC_STATE_INIT = 0, HGC_STATE_RUNNING } HGC_STATES; typedef enum { HGC_SCREEN_STATE_INIT = 0, HGC_SCREEN_STATE_SETUP_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1, HGC_SCREEN_STATE_SETUP_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2, HGC_SCREEN_STATE_SETUP_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3, HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3, HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3, } HGC_SCREEN_STATES; /*** GFX GOL Scheme Definitions ***/ #define GFX_SCHEME_NAME_0 "default" #define GFX_SCHEME_ALPHA_0 100 #define GFX_SCHEME_BACKGROUND_OFFSET_TOP_0 0 #define GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0 0 #define GFX_SCHEME_PRIMARY_COLOR_RED_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_PRIMARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_SECONDARY_COLOR_RED_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_GREEN_0 0x40 #define GFX_SCHEME_SECONDARY_COLOR_BLUE_0 0x40 #define GFX_SCHEME_DISABLED_COLOR_RED_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_GREEN_0 0x00 #define GFX_SCHEME_DISABLED_COLOR_BLUE_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_RED_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_GREEN_0 0x00 #define GFX_SCHEME_BACKGROUND_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_SIZE_0 3 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0 0x00 #define GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0 0xF8 #define GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0 0xFC #define GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0 0xF8 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0 0x00 #define GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0 0x00 #define GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0 0x40 #define GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0 0x40 #define GFX_SCHEME_GRADIENT_START_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_RED_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0 0x00 #define GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0 0x00 #define GFX_SCHEME_FILL_STYLE_0 GFX_FILL_STYLE_COLOR #define GFX_SCHEME_BACKGROUND_TYPE_0 GFX_BACKGROUND_NONE /*** GFX GOL Button Definitions ***/ #define GFX_STATICTEXT_LEFT_0 13 #define GFX_STATICTEXT_TOP_0 141 #define GFX_STATICTEXT_RIGHT_0 131 #define GFX_STATICTEXT_BOTTOM_0 191 #define GFX_STATICTEXT_STATE_0 GFX_GOL_STATICTEXT_DRAW_STATE #define GFX_STATICTEXT_TEXT_0 "0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0" #define GFX_STATICTEXT_ALIGNMENT_0 GFX_ALIGN_LEFT | GFX_ALIGN_TOP #define GFX_STATICTEXT_SCHEME_0 gfxScheme0 /*** static text IDs ***/ #define StaticText1 700 /*** GFX GOL windows Definitions ***/ #define GFX_PICTURE_LEFT_0 7 #define GFX_PICTURE_TOP_0 8 #define GFX_PICTURE_RIGHT_0 107 #define GFX_PICTURE_BOTTOM_0 137 #define GFX_PICTURE_STATE_0 GFX_GOL_PICTURECONTROL_DRAW_STATE #define GFX_PICTURE_SCALE_0 1 #define GFX_PICTURE_SCHEME_0 gfxScheme0 /*** Pictures IDs ***/ #define Picture1 800 /*** Line IDs ***/ #define Line11 950 #define Line10 951 #define Line9 952 #define Line8 953 #define Line7 954 #define Line6 955 #define Line5 956 #define Line4 957 #define Line3 958 #define Line2 959 #define Line1 960 /*** Rectangle IDs ***/ #define Rectangle5 1000 #define Rectangle4 1001 #define Rectangle1 1002 #define Rectangle3 1003 #define Rectangle2 1004 /*** Circle IDs ***/ #define Circle10 1050 #define Circle9 1051 #define Circle8 1052 #define Circle7 1053 #define Circle6 1054 #define Circle5 1055 #define Circle4 1056 #define Circle3 1057 #define Circle2 1058 #define Circle1 1059 /*** Screen IDs ***/ #define screen1 0 #define screen2 1 #define screen3 2 // ***************************************************************************** /* MPLAB Harmony Graphics Composer Objects Summary: Structure holding the graphics object handles Description: This structure contains the object handles for all graphics objects generated by the Harmony Graphics Composer Remarks: */ typedef struct HGC_OBJECTS { HGC_SCREEN_STATES screenState; // current state of screen state machine HGC_SCREEN_STATES prevRefreshState; // previous state of screen state machine // DRV_TOUCH_SAMPLE_POINTS samplePoints; /*** GOL Objects References ***/ GFX_GOL_STATICTEXT* pStaticText1Obj; GFX_GOL_PICTURECONTROL* pPicture1Obj; } HGC_OBJECTS; extern HGC_OBJECTS hgcObj; /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ); /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ); /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ); /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void); /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ); /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg); /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId); /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId); /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId); /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj); #endif // _GFX_HGC_DEFINITIONS_H /******************************************************************************* End of File */ //以下、gfx_hgc_definitions.c //------------------------------------------------------------------------- /******************************************************************************* MPLAB Harmony Graphics Composer Generated Implementation File File Name: gfx_hgc_definitions.c Summary: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Description: Build-time generated implementation from the MPLAB Harmony Graphics Composer. Created with MPLAB Harmony Version 1.05 *******************************************************************************/ // DOM-IGNORE-BEGIN /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ // DOM-IGNORE-END #include "gfx_hgc_definitions.h" /*** Default GFX GOL Scheme ***/ #define GFX_SCHEMEDEFAULT GOLSchemeDefault extern GFX_GOL_OBJ_SCHEME GFX_SCHEMEDEFAULT; /*** HGC-specified GFX GOL Scheme ***/ static GFX_GOL_OBJ_SCHEME *gfxScheme0; /*** Generated Asset References ***/ extern const GFX_RESOURCE_HDR flower16bit; extern const GFX_RESOURCE_HDR fireflysung; /*** Generated ASCII Text Labels ***/ static const GFX_XCHAR staticTextStr_0[] = { 0x31, 0x36, 0x62, 0x69, 0x74, 0x20, 0x42, 0x50, 0x50, 0x0 }; // 16bit BPP /*** HGC Object Global ***/ HGC_OBJECTS hgcObj; static HGC_STATES hgcState; /****************************************************************************** Function: HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) Remarks: This function returns the screen state */ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void ) { return hgcObj.screenState; } /****************************************************************************** Function: void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) Remarks: This function sets the screen state machine to a new state */ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState ) { hgcObj.prevRefreshState = hgcObj.screenState; hgcObj.screenState = newState; } /****************************************************************************** Function: void GFX_HGC_Setup ( void ) Summary: This function sets up the GOL message callback and draw callbacks. */ void GFX_HGC_Setup ( void ) { GFX_GOL_MessageCallbackSet(GFX_INDEX_0, &GFX_HGC_MessageCallback); GFX_GOL_DrawCallbackSet(GFX_INDEX_0, &GFX_HGC_DrawCallback); GFX_HGC_InitializeSchemes(); } /****************************************************************************** Function: void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject); Summary: This function is called in SYS_Tasks. The intent wait until the GFX library is initialized before supplying items to draw */ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject) { switch ( hgcState ) { case HGC_STATE_INIT: if (GFX_Status(gfxObject)==SYS_STATUS_READY) { GFX_HGC_Setup(); hgcState = HGC_STATE_RUNNING; } break; case HGC_STATE_RUNNING: break; default: break; } } /****************************************************************************** Function: void GFX_HGC_SchemeCreate ( void ) Summary: Allocates memory for a new scheme */ GFX_GOL_OBJ_SCHEME *GFX_HGC_SchemeCreate(void) { GFX_GOL_OBJ_SCHEME *pTemp; pTemp = (GFX_GOL_OBJ_SCHEME *)GFX_malloc(sizeof(GFX_GOL_OBJ_SCHEME)); if(pTemp != NULL) { memcpy(pTemp, &GFX_SCHEMEDEFAULT, sizeof(GFX_GOL_OBJ_SCHEME)); } return (pTemp); } /****************************************************************************** Function: void GFX_HGC_InitializeSchemes ( void ) Summary: Initializes all HGC-specified schemes */ void GFX_HGC_InitializeSchemes( void ) { gfxScheme0 = GFX_HGC_SchemeCreate(); #ifndef GFX_CONFIG_ALPHABLEND_DISABLE gfxScheme0->AlphaValue = GFX_SCHEME_ALPHA_0; #endif gfxScheme0->Color0 = GFX_RGBConvert(GFX_SCHEME_PRIMARY_COLOR_RED_0, GFX_SCHEME_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_PRIMARY_COLOR_BLUE_0); gfxScheme0->Color1 = GFX_RGBConvert(GFX_SCHEME_SECONDARY_COLOR_RED_0, GFX_SCHEME_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_SECONDARY_COLOR_BLUE_0); gfxScheme0->ColorDisabled = GFX_RGBConvert(GFX_SCHEME_DISABLED_COLOR_RED_0, GFX_SCHEME_DISABLED_COLOR_GREEN_0, GFX_SCHEME_DISABLED_COLOR_BLUE_0); gfxScheme0->CommonBkColor = GFX_RGBConvert(GFX_SCHEME_BACKGROUND_COLOR_RED_0, GFX_SCHEME_BACKGROUND_COLOR_GREEN_0, GFX_SCHEME_BACKGROUND_COLOR_BLUE_0); gfxScheme0->EmbossSize = GFX_SCHEME_EMBOSS_SIZE_0; gfxScheme0->EmbossDkColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_DARK_COLOR_RED_0, GFX_SCHEME_EMBOSS_DARK_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_DARK_COLOR_BLUE_0); gfxScheme0->EmbossLtColor = GFX_RGBConvert(GFX_SCHEME_EMBOSS_LIGHT_COLOR_RED_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_GREEN_0, GFX_SCHEME_EMBOSS_LIGHT_COLOR_BLUE_0); gfxScheme0->TextColor0 = GFX_RGBConvert(GFX_SCHEME_TEXT_PRIMARY_COLOR_RED_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_PRIMARY_COLOR_BLUE_0); gfxScheme0->TextColor1 = GFX_RGBConvert(GFX_SCHEME_TEXT_SECONDARY_COLOR_RED_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_GREEN_0, GFX_SCHEME_TEXT_SECONDARY_COLOR_BLUE_0); gfxScheme0->TextColorDisabled = GFX_RGBConvert(GFX_SCHEME_TEXT_DISABLED_COLOR_RED_0, GFX_SCHEME_TEXT_DISABLED_COLOR_GREEN_0, GFX_SCHEME_TEXT_DISABLED_COLOR_BLUE_0); #ifndef GFX_CONFIG_GRADIENT_DISABLE gfxScheme0->gradientStartColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_START_COLOR_RED_0, GFX_SCHEME_GRADIENT_START_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_START_COLOR_BLUE_0); gfxScheme0->gradientEndColor = GFX_RGBConvert(GFX_SCHEME_GRADIENT_END_COLOR_RED_0, GFX_SCHEME_GRADIENT_END_COLOR_GREEN_0, GFX_SCHEME_GRADIENT_END_COLOR_BLUE_0); #endif gfxScheme0->CommonBkLeft = GFX_SCHEME_BACKGROUND_OFFSET_TOP_0; gfxScheme0->CommonBkTop = GFX_SCHEME_BACKGROUND_OFFSET_LEFT_0; gfxScheme0->pFont = (GFX_RESOURCE_HDR*)&fireflysung; gfxScheme0->pCommonBkImage = (GFX_RESOURCE_HDR*)NULL; gfxScheme0->fillStyle = GFX_SCHEME_FILL_STYLE_0; gfxScheme0->CommonBkType = GFX_SCHEME_BACKGROUND_TYPE_0; } /****************************************************************************** Function: bool GFX_HGC_MESSAGECallback(uint16_t objMsg, GFX_GOL_OBJ_HEADER* pObj, GFX_GOL_MESSAGE* pMsg) Input: objMsg - translated message for the object, pObj - pointer to the object, pMsg - pointer to the non-translated, raw GOL message Output: If the function returns non-zero the message will be processed by default Remarks: GFX_GOL_MESSAGECallback() function calls it each time the valid message for the GOL object is received. */ bool GFX_HGC_MessageCallback(GFX_GOL_TRANSLATED_ACTION objMsg, GFX_GOL_OBJ_HEADER *pObj, GFX_GOL_MESSAGE *pMsg) { // process messages for demo screens switch (hgcObj.screenState) { case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: if (GFX_HGC_MsgPictures(objMsg, pObj) == true) return true; if (GFX_HGC_MsgStaticTexts(objMsg, pObj) == true) return true; break; default: // process message by default return true; } return true; } /****************************************************************************** Function: bool GFX_HGC_DrawCallback( void ) Output: If the function returns non-zero the draw control will be passed to GOL Remarks: GFX_GOL_Draw() function calls it each time when GOL objects drawing is completed. HGC-specified draw data is grouped by screens states. It takes two states to complete the drawing of each screen. GFX GOL objects are drawn first and then GFX Primitives are drawn next to ensure primitives are not covered by GOL objects. */ bool GFX_HGC_DrawCallback( void ) { switch (hgcObj.screenState) { case HGC_SCREEN_STATE_INIT: //Draw the primary screen as selected in the Composer GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); return true; case HGC_SCREEN_STATE_SETUP_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetupScreen(screen1); GFX_HGC_DrawScreen_GOL(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_DrawScreen_Primitives(screen1); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen1: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetupScreen(screen2); GFX_HGC_DrawScreen_GOL(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_DrawScreen_Primitives(screen2); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen2: break; case HGC_SCREEN_STATE_SETUP_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetupScreen(screen3); GFX_HGC_DrawScreen_GOL(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_DrawScreen_Primitives(screen3); GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3); break; case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3); break; case HGC_SCREEN_STATE_DISPLAY_SCREEN_screen3: break; default: return true; // release drawing control to GOL by default } return true; // release drawing control to GOL } /****************************************************************************** Function: void GFX_HGC_SetupScreen( uint8_t screenId ) Remarks: Clears current screen and starts a fresh screen with its background color */ void GFX_HGC_SetupScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen2: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; case screen3: GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00)); GFX_ScreenClear(GFX_INDEX_0); GFX_GOL_ObjectListFree(GFX_INDEX_0); // free memory for the objects in the previous linked list and start new list break; default: break; } } /****************************************************************************** Function: bool GFX_HGC_ChangeScreen( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: Can be called to initiate GFX Library to draw a new screen */ bool GFX_HGC_ChangeScreen(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen1); break; case screen2: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen2); break; case screen3: GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_screen3); break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_GOL( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX GOL objects are drawn here, grouped by screen. The draw order is reverse Z-ordered. */ bool GFX_HGC_DrawScreen_GOL(uint8_t screenId) { switch (screenId) { case screen1: break; case screen2: GFX_HGC_DrawItem(Picture1); GFX_HGC_DrawItem(StaticText1); break; case screen3: break; default: return false; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId ) Output: Returns true if a screenId matches an existing screen identifier Remarks: HGC-specified GFX Primitives are drawn here, grouped by screen. GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects do not cover GFX Primitives */ bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId) { switch (screenId) { case screen1: GFX_HGC_DrawItem(Circle1); GFX_HGC_DrawItem(Circle2); GFX_HGC_DrawItem(Circle3); GFX_HGC_DrawItem(Circle4); GFX_HGC_DrawItem(Circle5); GFX_HGC_DrawItem(Circle6); GFX_HGC_DrawItem(Circle7); GFX_HGC_DrawItem(Circle8); GFX_HGC_DrawItem(Circle9); GFX_HGC_DrawItem(Circle10); GFX_HGC_DrawItem(Line1); GFX_HGC_DrawItem(Line2); GFX_HGC_DrawItem(Line3); GFX_HGC_DrawItem(Line4); GFX_HGC_DrawItem(Line5); GFX_HGC_DrawItem(Line6); GFX_HGC_DrawItem(Line7); GFX_HGC_DrawItem(Line8); GFX_HGC_DrawItem(Line9); GFX_HGC_DrawItem(Line10); GFX_HGC_DrawItem(Line11); break; case screen2: break; case screen3: GFX_HGC_DrawItem(Rectangle2); GFX_HGC_DrawItem(Rectangle3); GFX_HGC_DrawItem(Rectangle1); GFX_HGC_DrawItem(Rectangle4); GFX_HGC_DrawItem(Rectangle5); break; default: return true; } return true; // release drawing control to GOL } /****************************************************************************** Function: bool GFX_HGC_DrawItem(int itemId) Output: Returns true if a itemId matches an existing item identifier Remarks: Every item specified in every screen in HGC is listed in this function */ bool GFX_HGC_DrawItem(int itemId) { switch(itemId) { case StaticText1: hgcObj.pStaticText1Obj = GFX_GOL_StaticTextCreate ( GFX_INDEX_0, StaticText1, // button ID GFX_STATICTEXT_LEFT_0, // left GFX_STATICTEXT_TOP_0, // top GFX_STATICTEXT_RIGHT_0, // right GFX_STATICTEXT_BOTTOM_0, // bottom GFX_STATICTEXT_STATE_0, // state (GFX_XCHAR*)staticTextStr_0, // text GFX_STATICTEXT_ALIGNMENT_0, //alignment GFX_STATICTEXT_SCHEME_0 ); // use alternate scheme break; case Picture1: hgcObj.pPicture1Obj = GFX_GOL_PictureControlCreate ( GFX_INDEX_0, Picture1, // picture ID GFX_PICTURE_LEFT_0, // left GFX_PICTURE_TOP_0, // top GFX_PICTURE_RIGHT_0, // right GFX_PICTURE_BOTTOM_0, // bottom GFX_PICTURE_STATE_0, // state GFX_PICTURE_SCALE_0, // scale (GFX_RESOURCE_HDR*)&flower16bit, // bitmap GFX_PICTURE_SCHEME_0 ); break; case Line11: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*5, //267, // p1x 0, // p1y 240/6, //53, // p2x 319); //239); // p2y break; } case Line10: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*4, //214, // p1x 0, // p1y 240/6*2, //106, // p2x 319); //239); // p2y break; } case Line9: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6*2, //106, // p1x 0, // p1y 240/6*4, //214, // p2x 319); //239); // p2y break; } case Line8: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 240/6, //53, // p1x 0, // p1y 240/6*5, //267, // p2x 319); //239); // p2y break; } case Line7: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 120, // 160, // p1x 0, // p1y 120, // 160, // p2x 319); // 239); // p2y break; } case Line6: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 319, //239, // p1y 239, //319, // p2x 0); // p2y break; } case Line5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line4: //LIGHT GREEN { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 239, //319, // p1x 0, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line3: //YELLOW { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 0, // p2x 319); //239); // p2y break; } case Line2: //BLUE { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 319, //239, // p1y 239, //319, // p2x 319); //239); // p2y break; } case Line1: //RED { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_LineDraw(GFX_INDEX_0, 0, // p1x 0, // p1y 239, //319, // p2x 0); // p2y break; } case Rectangle5: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 65-40, // p1x 30+40, // p1y 255-40, // p2x 210+40); // p2y break; } case Rectangle4: { GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 80-40, // p1x 45+40, // p1y 240-40, // p2x 195+40); // p2y break; } case Rectangle1: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_ALPHA_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_AlphaBlendingValueSet(GFX_INDEX_0, 100); GFX_RectangleFillDraw(GFX_INDEX_0, 125-40, // p1x 90+40, // p1y 195-40, // p2x 150+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 125-40, // p1x 90+40, // p1y 195-40, // p2x 150+40); // p2y break; } case Rectangle3: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_RectangleFillDraw(GFX_INDEX_0, 110-40, // p1x 75+40, // p1y 210-40, // p2x 165+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0xFC, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 110-40, // p1x 75+40, // p1y 210-40, // p2x 165+40); // p2y break; } case Rectangle2: { GFX_FillStyleSet(GFX_INDEX_0, GFX_FILL_STYLE_COLOR); GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_RectangleFillDraw(GFX_INDEX_0, 95-40, // p1x 60+40, // p1y 225-40, // p2x 180+40); // p2y GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0xF8)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_RectangleDraw(GFX_INDEX_0, 95-40, // p1x 60+40, // p1y 225-40, // p2x 180+40); // p2y break; } case Circle10: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 3); // radius break; } case Circle9: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 16); // radius break; } case Circle8: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 29); // radius break; } case Circle7: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 42); // radius break; } case Circle6: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 55); // radius break; } case Circle5: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 68); // radius break; } case Circle4: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 81); // radius break; } case Circle3: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 94); // radius break; } case Circle2: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 107); // radius break; } case Circle1: { GFX_ColorSet(GFX_INDEX_0,GFX_RGBConvert(0xF8, 0x00, 0x00)); GFX_LineStyleSet(GFX_INDEX_0, GFX_LINE_STYLE_THIN_SOLID); GFX_CircleDraw(GFX_INDEX_0, 120, //160, // p1x 160, //120, // p1y 120); // radius break; } default: return false; // process by default } return true; } /****************************************************************************** Function: bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Static Text events */ bool GFX_HGC_MsgStaticTexts(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } } /****************************************************************************** Function: bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) Output: Returns true if a Object ID matches an existing item identifier Remarks: Handles GFX GOL Picture Control events */ bool GFX_HGC_MsgPictures(uint16_t objMsg, GFX_GOL_OBJ_HEADER *pObj) { switch (GFX_GOL_ObjectIDGet(pObj)) { default: return false; // default false as it is not processed } }
<動作結果>
1. ピクチャー
以下、各画面
液晶各画面 | |
@ | |
A | |
B |
2.、動画 -----> YouTube